comfuture    04/11/24 19:16:11

  Log:
  Status:
  
  Vendor Tag:	tcvs-vendor
  Release Tags:	tcvs-release
  
  No conflicts created by this import


comfuture    04/11/24 21:16:05

  Log:
  Status:
  
  Vendor Tag:	tcvs-vendor
  Release Tags:	tcvs-release
  
  No conflicts created by this import


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/cache added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/conf added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/css added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/html added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/image added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/js added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/lib added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/module added to the repository


comfuture    04/11/24 21:20:39

  Log:
  Directory /cvsroot/simin/siminweb/tmp added to the repository


comfuture    04/11/24 21:20:40

  Log:
  Directory /cvsroot/simin/siminweb/util added to the repository


comfuture    04/11/24 21:20:40

  Log:
  Directory /cvsroot/simin/siminweb/var added to the repository


comfuture    04/11/24 21:20:41

  Log:
  Directory /cvsroot/simin/siminweb/cache/output added to the repository


comfuture    04/11/24 21:20:41

  Log:
  Directory /cvsroot/simin/siminweb/cache/template added to the repository


comfuture    04/11/24 21:20:42

  Log:
  Directory /cvsroot/simin/siminweb/conf/board added to the repository


comfuture    04/11/24 21:20:45

  Log:
  Directory /cvsroot/simin/siminweb/html/admin added to the repository


comfuture    04/11/24 21:20:45

  Log:
  Directory /cvsroot/simin/siminweb/html/member added to the repository


comfuture    04/11/24 21:20:45

  Log:
  Directory /cvsroot/simin/siminweb/html/news added to the repository


comfuture    04/11/24 21:20:49

  Log:
  Directory /cvsroot/simin/siminweb/html/member/admin added to the repository


comfuture    04/11/24 21:20:52

  Log:
  Directory /cvsroot/simin/siminweb/html/news/admin added to the repository


comfuture    04/11/24 21:20:56

  Log:
  Directory /cvsroot/simin/siminweb/image/icon added to the repository


comfuture    04/11/24 21:21:01

  Log:
  Directory /cvsroot/simin/siminweb/lib/DB added to the repository


comfuture    04/11/24 21:21:01

  Log:
  Directory /cvsroot/simin/siminweb/lib/Template_ added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/admin added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/board added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/doc added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/game added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/member added to the repository


comfuture    04/11/24 21:21:07

  Log:
  Directory /cvsroot/simin/siminweb/module/news added to the repository


comfuture    04/11/24 21:21:10

  Log:
  Directory /cvsroot/simin/siminweb/module/doc/admin added to the repository


comfuture    04/11/24 21:21:16

  Log:
  Directory /cvsroot/simin/siminweb/module/member/admin added to the repository


comfuture    04/11/24 21:21:20

  Log:
  Directory /cvsroot/simin/siminweb/module/news/admin added to the repository


comfuture    04/11/24 21:21:24

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor added to the repository


comfuture    04/11/24 21:21:25

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor added to the repository


comfuture    04/11/24 21:21:25

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_aspnet added to the repository


comfuture    04/11/24 21:21:25

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation added to the repository


comfuture    04/11/24 21:21:25

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_samples added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/css added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/dialog added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/images added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/js added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/lang added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins added to the repository


comfuture    04/11/24 21:21:27

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/_source added to the repository


comfuture    04/11/24 21:21:31

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/dialog/css added to the repository


comfuture    04/11/24 21:21:31

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/dialog/images added to the repository


comfuture    04/11/24 21:21:31

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/dialog/js added to the repository


comfuture    04/11/24 21:21:39

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser added to the repository


comfuture    04/11/24 21:21:40

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default added to the repository


comfuture    04/11/24 21:21:41

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/connectors added to the repository


comfuture    04/11/24 21:21:41

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/images added to the repository


comfuture    04/11/24 21:21:41

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/js added to the repository


comfuture    04/11/24 21:21:43

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/connectors/aspx added to the repository


comfuture    04/11/24 21:21:46

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons added to the repository


comfuture    04/11/24 21:21:49

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32 added to the repository


comfuture    04/11/24 21:21:56

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/images/smiley added to the repository


comfuture    04/11/24 21:21:59

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/images/smiley/fun added to the repository


comfuture    04/11/24 21:21:59

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/images/smiley/msn added to the repository


comfuture    04/11/24 21:22:08

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/default added to the repository


comfuture    04/11/24 21:22:08

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/office2003 added to the repository


comfuture    04/11/24 21:22:08

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/silver added to the repository


comfuture    04/11/24 21:22:10

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/default/images added to the repository


comfuture    04/11/24 21:22:10

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/default/toolbar added to the repository


comfuture    04/11/24 21:22:16

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/office2003/images added to the repository


comfuture    04/11/24 21:22:16

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/office2003/toolbar added to the repository


comfuture    04/11/24 21:22:22

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/silver/images added to the repository


comfuture    04/11/24 21:22:22

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/skins/silver/toolbar added to the repository


comfuture    04/11/24 21:22:28

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/_source/classes added to the repository


comfuture    04/11/24 21:22:28

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/_source/commandclasses added to the repository


comfuture    04/11/24 21:22:28

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/_source/globals added to the repository


comfuture    04/11/24 21:22:28

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/editor/_source/internals added to the repository


comfuture    04/11/24 21:22:37

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2 added to the repository


comfuture    04/11/24 21:22:38

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin added to the repository


comfuture    04/11/24 21:22:42

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Debug added to the repository


comfuture    04/11/24 21:22:42

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Release added to the repository


comfuture    04/11/24 21:22:46

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation/Developers added to the repository


comfuture    04/11/24 21:22:46

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation/Using FCKeditor added to the repository


comfuture    04/11/24 21:22:48

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors added to the repository


comfuture    04/11/24 21:22:48

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation/Developers/images added to the repository


comfuture    04/11/24 21:22:50

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses added to the repository


comfuture    04/11/24 21:22:57

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_samples/aspx added to the repository


comfuture    04/11/24 21:22:57

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_samples/cfm added to the repository


comfuture    04/11/24 21:22:57

  Log:
  Directory /cvsroot/simin/siminweb/util/fckeditor/_samples/html added to the repository


comfuture    04/11/24 21:25:16

  Added:       .        NEWS RPC index.php info.php main.php source.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/NEWS
  
  Index: NEWS
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: RPC/index.php
  * 작성일: 2004-10-25
  * 작성자: 거친마루
  * 설  명: XML_RPC 서버 (뉴스전용)
  *****************************************************************
  * 
  */
  
  require_once "XML/RPC/Server.php";
  header('Content-type: text/xml');
  
  $SERVER = new XML_RPC_Server(
  	array(
  		'server.list' => array('function'=>'server_list'),
  		'news.summery' => array('function' => 'news_summery')
  	),
  	true
  );
  
  // {{{ Methods
  
  function server_list($params) {
  	return new XML_RPC_Response(
  		XML_RPC_encode(array(
  			'server1.simin.h-9.net', 'server2.simin.h-9.net', 'server3.simin.h-9.net'
  		))
  	);
  }
  
  function news_summery($params) {
  	require_once "lib/class.DB.php";
  	$DB = DB::Connection(getConnectionString());
  
  	$data = $DB->sqlFetchAll("
  		SELECT
  			idx, reg_date date, title, content
  		FROM
  			simin_news
  		ORDER BY
  			reg_date DESC
  		LIMIT 3
  	",MYSQL_ASSOC);
  	@array_walk($data,'cb_format_news');
  	$response = new XML_RPC_Response(XML_RPC_encode($data));
  	return $response;
  }
  
  /**
  * string getConnectionString(void)
  * 
  * 설정파일에서 db connection을 만들어 리턴합니다.
  * 
  */
  function getConnectionString($dsn='default') {
  	$conf = @parse_ini_file('conf/database.conf.php',true);
  	$str = $conf[$dsn]['dbms'].'://'.$conf[$dsn]['user'].':'.$conf[$dsn]['pass'].'@'.$conf[$dsn]['host'].'/'.$conf[$dsn]['db'];
  	return $str;
  }
  
  //==-- callbacks --==//
  function cb_format_news(&$arr) {
  	$arr['url'] = 'http://simin.h-9.net/?act=news.read&id='.$arr['idx'];
  	$arr['content'] = preg_replace('/\s+/',' ',strip_tags($arr['content']));
  //	$arr['content'] = mb_substr($arr['content'],0,10);
  	unset($arr['0'],$arr['1'],$arr['2'],$arr['3'],$arr['idx']);	// cleanup junk keys..
  }
  // }}}
  ?>
  
  
  
  1.1                  siminweb/RPC
  
  Index: RPC
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: RPC/index.php
  * 작성일: 2004-10-25
  * 작성자: 거친마루
  * 설  명: XML_RPC 서버 
  *****************************************************************
  * 
  */
  
  require_once "XML/RPC/Server.php";
  header('Content-type: text/xml');
  
  $SERVER = new XML_RPC_Server(
  	array(
  		'hello' => array('function'=>'hello'),
  		'test.hello' => array('function'=>'hello'),
  		'server.list' => array('function'=>'server_list'),
  		'news.summery' => array('function' => 'news_summery'),
  		'auth.login' => array('function' => 'auth_login'),
  		'user.info' => array('function' => 'user_info')
  	),
  	true
  );
  
  // {{{ Methods
  
  function hello($params) {
  	$p = $params->getParam(0);
  	$name = $p->scalarval();
  	return new XML_RPC_Response(new XML_RPC_Value('Hello, '.$name,'string'));
  }
  
  function server_list($params) {
  	return new XML_RPC_Response(
  		new XML_RPC_Value(array(
  			new XML_RPC_Value('server1.simin.h-9.net'),
  			new XML_RPC_Value('server2.simin.h-9.net'),
  			new XML_RPC_Value('server3.simin.h-9.net')
  		),'array')
  	);
  }
  
  function news_summery($params) {
  	/*
  	$arr = array();
  	for ($i = 3; $i >= 1; $i--) {
  		$arr[] = array(
  			'url' => 'http://simin.h-9.net/?act=news.read&id='.$i,
  			'date' => date("Y-m-d H:i:s"),
  			'title' => $i.' 번째 테스트 뉴스입니다',
  			'content' => "조만장자 마이더스, 시민쾌걸Online에 기부금 100억 투척!!!\r\n세상에 이럴수가... 명색이 시민쾌걸을 빛내는 게임인데, 펭돌이 용돈보다도 적은 액수를 내놓다니...\r\n게임 제작에 참여한 사람들은 끝내 오열을 참지 못하며 분개했다..."
  		);
  	}
  	*/
  
  	require_once "lib/class.DB.php";
  	$DB = DB::Connection(getConnectionString());
  
  	$data = $DB->sqlFetchAll("
  		SELECT
  			idx, reg_date date, title, content
  		FROM
  			simin_news
  		ORDER BY
  			reg_date DESC
  		LIMIT 3
  	",MYSQL_ASSOC);
  	@array_walk($data,'cb_format_news');
  	$response = new XML_RPC_Response(XML_RPC_encode($data));
  	return $response;
  }
  
  function auth_login($params) {
  	$p1 = $params->getParam(0);
  	$p2 = $params->getParam(1);
  	if ($p1) $user = $p1->scalarval();
  	if ($p2) $pass = $p2->scalarval();
  
  	if (!$user || !$pass) {
  		$msg = array(
  			'code' => '01',
  			'message' => 'Error! some parameter is not valid'
  		);
  		return new XML_RPC_Response(XML_RPC_encode($msg));
  	} else {
  		require_once "lib/class.DB.php";
  		$DB = DB::Connection(getConnectionString());
  		$cnt = $DB->sqlFetchOne("
  			SELECT
  				COUNT(*)
  			FROM
  				simin_user
  			WHERE
  				user='$user' AND pass='$pass'
  		");
  		if ($cnt > 0) {
  			$msg = array(
  				'code' => '00',
  				'message' => 'Success'
  			);
  		} else {
  			$msg = array(
  				'code' => '02',
  				'message' => 'No such user'
  			);
  		}
  		return new XML_RPC_Response(XML_RPC_encode($msg));
  	}
  }
  
  function user_info($params) {
  	$p1 = $params->getParam(0);
  	if ($p1) $user = $p1->scalarval();
  
  	require_once "lib/class.DB.php";
  	$DB = DB::Connection(getConnectionString());
  	$DB->config['fetch_mode'] = MYSQL_ASSOC;
  
  	$info = $DB->sqlFetch("
  		SELECT
  			*
  		FROM
  			simin_user
  		WHERE
  			simin_user.user = '$user'
  	");
  
  	return new XML_RPC_Response(XML_RPC_encode($info));
  }
  
  
  /**
  * string getConnectionString(void)
  * 
  * 설정파일에서 db connection을 만들어 리턴합니다.
  * 
  */
  function getConnectionString($dsn='default') {
  	$conf = @parse_ini_file('conf/database.conf.php',true);
  	$str = $conf[$dsn]['dbms'].'://'.$conf[$dsn]['user'].':'.$conf[$dsn]['pass'].'@'.$conf[$dsn]['host'].'/'.$conf[$dsn]['db'];
  	return $str;
  }
  
  //==-- callbacks --==//
  function cb_format_news(&$arr) {
  	$arr['url'] = 'http://simin.h-9.net/?act=news.read&id='.$arr['idx'];
  	$arr['content'] = preg_replace('/\s+/',' ',strip_tags($arr['content']));
  //	$arr['content'] = mb_substr($arr['content'],0,10);
  	unset($arr['idx']);	// cleanup junk keys..
  }
  // }}}
  ?>
  
  
  
  1.1                  siminweb/index.php
  
  Index: index.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: index.php
  *   : WebApp ASP for űбý
  *   ¥: 2004-01-09
  * ۼ: ģ
  ***********************************************/
  
  //==--  ̴ Ʈ ȯ溯 ޾ƿ´ --==//
  if (!$act) $act = $_REQUEST['act'];
  if (!$p) $p = $_REQUEST['p'];
  $REQUEST_URI = getenv("REQUEST_URI");
  $REQUEST_METHOD = getenv("REQUEST_METHOD");
  $HOST = ereg_replace('^www\.','',strtolower(getenv('HTTP_HOST')));
  session_start();
  
  if ($act) {
  	$_path = explode('.',$act);
  	$APPFILE = array_pop($_path).".php";
  	$APPPATH = "module/".implode('/',$_path);
  } elseif ($p) {
  	$_path = explode('.',$p);
  	$APPFILE = array_pop($_path).'.htm';
  	$APPPATH = "html/".implode('/',$_path).'/';
  } else {
  	$APPFILE = 'main.php';
  }
  
  ini_alter("include_path","$APPPATH:$APPPATH/lib:./lib:".ini_get("include_path"));
  require_once "class.WebApp.php";
  $CONF = WebApp::getConf();
  $tpl = &WebApp::singleton('Display');
  $URL = &WebApp::singleton('QueryString');
  set_error_handler(array('WebApp','showError'));
  
  define('REQUEST_URI',$REQUEST_URI);
  define('REQUEST_METHOD',$REQUEST_METHOD);
  define('HOST',$HOST);
  define('APPFILE',$APPFILE);
  define('APPPATH',$APPPATH);
  
  define('WEBAPP_RUNMODE_GLOBAL', 1);
  define('WEBAPP_RUNMODE_FUNCTION', 2);
  define('_THEME', WebApp::getConf('design.theme'));
  define('_SKIN', WebApp::getConf('design.skin'));
  
  $RUN_MODE = WEBAPP_RUNMODE_GLOBAL;
  $pathinfo = explode('/',$APPPATH);
  foreach ($pathinfo as $_path) {
  	$path.= $_path."/";
  	$_conf = $path."page.conf.php";
  	$_common = $path."__init__.php";
  	if (is_file($_conf)) {
  		$_cfg = @parse_ini_file($_conf,true);
  		if ($_cfg['layout']) $ch = $_cfg['layout'];
  		@extract($_cfg['phpvars']);
  	}
  	if (is_file($_common)) include $_common;
  }
  $tpl->setLayout('default');
  if ($act) {
  	$module = $APPPATH.'/'.$APPFILE;
  	if (is_file($module)) include $module;
  	else {
  		$tpl->define('CONTENT','html/404.htm');
  	}
  } elseif ($p) {
  	extract($_GET);
  	$tpl->define("CONTENT",$APPPATH.$APPFILE);
  } else {
  	include $APPFILE;
  }
  
  $tpl->printAll();
  ?>
  
  
  
  1.1                  siminweb/info.php
  
  Index: info.php
  ===================================================================
  <?
  //phpinfo();
  ?>
  
  
  
  1.1                  siminweb/main.php
  
  Index: main.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * ϸ: main.php
  * ۼ: 2004-07-23
  * ۼ: ģ
  *   : Ʈ 
  *****************************************************************
  * 
  */
  
  $SITEMAIN = WebApp::getConf('site.main');
  $tpl->setLayout('main');
  
  if ($SITEMAIN) {
  //  WebApp::call($SITEMAIN.".main");
      @include "module/".str_replace('.','/',$SITEMAIN).'/__init__.php';
      include "module/".str_replace('.','/',$SITEMAIN).'/main.php';
  } else {
      $tpl->define('CONTENT','html/main.htm');
      if (!$tpl->isCached('LAYOUT')) {
          $tpl->assign('cached','false');
          $tpl->setCache('LAYOUT',3600,$_GET);
      }
  }
  ?>
  
  
  
  1.1                  siminweb/source.php
  
  Index: source.php
  ===================================================================
  <?php
  $filename = '.'.getenv('PATH_INFO');
  $ext = array_pop(explode('.',$filename));
  list(,$dir1) = explode('/',$filename);
  if ($dir1 == 'conf') die();
  
  switch ($ext) {
      case 'c': case 'cpp':
          $syntax = 'c';
          break;
      case 'java':
          $syntax = 'java';
          break;
      case 'php': case 'php3': case 'inc':
          $syntax = 'php';
          break;
      case 'html': case 'htm':
          $syntax = 'html';
          break;
      case 'py':
          $syntax = 'python';
          break;
      case 'sql':
          $syntax = 'sql';
          break;
      case 'js':
          $syntax = 'javascript';
          break;
      case 'sh':
          $syntax = 'shell';
          break;
      default:
          if (!$_GET['syntax']) {
              die("...");
          }
  }
  
  if ($_GET['syntax']) $syntax = $_GET['syntax'];
  
  $cmd = 'vim -T xterm -e -s '.$filename.' +"syntax on" +"set ts=4" +"set bg=dark" +"set syntax='.$syntax.'" +"so \$VIMRUNTIME/syntax/2html.vim" +"wq! /dev/stdout" +q';
  system($cmd);
  ?>
  
  
  
  


comfuture    04/11/24 21:25:16

  Added:       conf     board.conf.php database.conf.php.default
                        global.conf.php.default layout.conf.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/conf/board.conf.php
  
  Index: board.conf.php
  ===================================================================
  ;<?/*
  ccode = 1010
  listnum = 10
  navnum = 10
  gid = 0,1,2
  uid = 1,2,3
  table = wa_board
  skin = default
  layout = sub
  orderby = thread
  listfields = subject,title,writer,reg_date,read_count,picture
  
  [option]
  search = Yes
  reply = Yes
  comment = Yes
  reply_mail = No
  allow_private = Yes
  show_ip = 1
  
  [access]
  write = 1
  modify = 1
  delete = 1
  list = 0
  
  ;*/?>)
  
  
  1.1                  siminweb/conf/database.conf.php.default
  
  Index: database.conf.php.default
  ===================================================================
  ;<?/*
  
  [default]
  dbms = mysql
  host = db-host
  user = db-user
  pass = db-pass
  db = db-name
  
  ;*/?>)
  
  
  
  1.1                  siminweb/conf/global.conf.php.default
  
  Index: global.conf.php.default
  ===================================================================
  ;<?/*
  [account]
  host = hostname
  user = account-user
  pass = account-pass
  
  [site]
  
  [design]
  theme = roundrect
  skin = orange
  
  [admin]
  pass = webadmin-pass
  
  [install]
  version "0.9b"
  
  ;*/?>)
  
  
  
  1.1                  siminweb/conf/layout.conf.php
  
  Index: layout.conf.php
  ===================================================================
  ;<?/*
  
  [main]
  LAYOUT = html/layout_main.htm
  
  [sub]
  LAYOUT = html/layout_sub.htm
  ;*/?>)
  
  
  


comfuture    04/11/24 21:25:16

  Added:       css      sortabletable.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/css/sortabletable.css
  
  Index: sortabletable.css
  ===================================================================
  .sort-table {
  	font:		Icon;
  	border:		1px Solid ThreeDShadow;
  	background:	Window;
  	color:		WindowText;
  	cursor: default;
  }
  
  .sort-table thead {
  	background:	ButtonFace;
  }
  
  .sort-table td {
  	padding:	2px 5px;
  }
  
  .sort-table thead td {
  	border:			1px solid;
  	border-color:	ButtonHighlight ButtonShadow
  					ButtonShadow ButtonHighlight;
  	cursor:			default;
  }
  
  .sort-table thead td:active {
  	border-color:	ButtonShadow ButtonHighlight
  					ButtonHighlight ButtonShadow;
  	padding:		3px 4px 1px 6px;
  }
  
  .sort-table thead td[_sortType=None]:active {
  	border-color:	ButtonHighlight ButtonShadow
  					ButtonShadow ButtonHighlight;
  	padding:		2px 5px;
  }
  
  .sort-arrow {
  	width:					11px;
  	height:					11px;
  	background-position:	center center;
  	background-repeat:		no-repeat;
  	margin:					0 2px;
  }
  
  .sort-arrow.descending {
  	background-image:		url("/image/icon/downsimple.png");
  
  }
  
  .sort-arrow.ascending {
  	background-image:		url("/image/icon/upsimple.png");
  }
  
  


comfuture    04/11/24 21:25:16

  Added:       html/admin login.htm main.htm menu.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/admin/login.htm
  
  Index: login.htm
  ===================================================================
  <form name="loginform" method="post">
  <table border="1" align="center">
  	<tr>
  		<td>관리자 영역입니다. 패스워드를 입력하세요</td>
  	</tr>
  	<tr>
  		<td><input type="password" size="12" name="admin_pass" /></td>
  	</tr>
  	<tr>
  		<td><input type="submit" value=" 로 그 인 " /></td>
  	</tr>
  </table>
  </form>
  
  
  1.1                  siminweb/html/admin/main.htm
  
  Index: main.htm
  ===================================================================
  <frameset cols="150,*" border="0" frameborder="no">
  	<frame name="menu" src="?act=admin.menu" />
  	<frame name="content" src="about:blank" />
  </frameset>
  
  
  1.1                  siminweb/html/admin/menu.htm
  
  Index: menu.htm
  ===================================================================
  <script>WebApp.Import('lib.accordion.js');</script>
  <style>
  body, a, div, font {
  	font-size:9pt;
  }
  
  body {
  	overflow: hidden;
  	margin: 0px;
  	background-color: #F0F0F0;
  }
  
  a {
  	text-decoration: none;
  	color: #454545;
  }
  
  a:hover {
  	text-decoration: underline;
  	color: #0000FF;
  }
  
  .menu {
  	border:1px solid #CCCCCC;
  	background-color:#DEDEDE;
  	padding:3px 1px 1px 5px;
  	width:150px;
  	cursor: pointer;
  }
  .submenu {
  	width:150px;
  	padding-left:20px;
  	display:none;
  }
  </style>
  </head>
  <body topmargin="0" leftmargin="0">
  <base target="content" />
  <br>시민고스톱 관리자메뉴<br><br>
  <div class="menu" onClick="accordion('sub1');">회원관리</div>
  <div id="sub1" class="submenu">
  	<div><a href="?act=member.admin.list">+ 가입회원 목록</a></div>
  	<div><a href="?act=member.admin.list">+ 인증안된 회원</a></div>
  	<div>+ 게임머니 관리</div>
  </div>
  <div class="menu" onClick="accordion('sub2');">웹페이지관리</div>
  <div id="sub2" class="submenu">
  	<div><a href="?act=news.admin.list">+ 뉴스</a></div>
  </div>
  <div class="menu" onClick="accordion('sub3');">게임관리</div>
  <div id="sub3" class="submenu">
  	<div>+ 게임랭킹</div>
  	<div>+ 게임방관리</div>
  	<div>+ 트래픽열람</div>
  </div>
  <div class="menu"<a href="?act=admin.logout">관리자 종료</a></div>
  <div class="menu"><a href="?main" target="_parent">홈으로</a></div>
  
  
  


comfuture    04/11/24 21:25:16

  Added:       html     layout_blank.htm layout_default.htm layout_main.htm
                        main.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/layout_blank.htm
  
  Index: layout_blank.htm
  ===================================================================
  {# CONTENT}
  
  
  1.1                  siminweb/html/layout_default.htm
  
  Index: layout_default.htm
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  <head>
  <title>시민쾌걸 온라인 고스톱</title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="거친마루">
  <meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  <meta name="Description" content="시민쾌걸 온라인 고스톱">
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  	{# CONTENT}
  </body>
  </html>
  
  
  
  1.1                  siminweb/html/layout_main.htm
  
  Index: layout_main.htm
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  <head>
  <title>시민쾌걸 온라인 고스톱</title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="거친마루">
  <meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  <meta name="Description" content="시민쾌걸 온라인 고스톱">
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
  <table width="100%" cellpadding="2" cellspacing="1" bgcolor="#c0c0c0" align="center">
  	<tr>
  		<td colspan="2" bgcolor="#FFFFFF">
  			<img src="http://ggorro.com/ggorro/avatar-zorro-01.gif"> 시민쾌걸 온라인 고스톱
  		</td>
  	</tr>
  	<tr>
  		<td width="150" bgcolor="#FFFFFF">
  			<a href="/wiki/wiki.php">위키페이지</a><br />
  			<a href="?act=member.join">회원가입</a><br />
  			<a href="?act=admin.main">관리자모드</a>
  		</td>
  		<td bgcolor="#FFFFFF">
  			{# CONTENT}
  		</td>
  	</tr>
  </table>
  </body>
  </html>
  
  
  
  1.1                  siminweb/html/main.htm
  
  Index: main.htm
  ===================================================================
  이곳은 메인 페이지입니다
  
  
  


comfuture    04/11/24 21:25:16

  Added:       html/member/admin list.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/member/admin/list.htm
  
  Index: list.htm
  ===================================================================
  <script type="text/javascript">
  WebApp.Import('sortabletable.js');
  WebApp.Import('selectableelements.js');
  WebApp.Import('selectabletablerows.js');
  WebApp.ImportCSS('sortabletable.css');
  </script>
  <style>
  	body, a, div, font {
  		font-size:9pt;
  	}
  
  	a {
  		text-decoration: none;
  		color: #454545;
  	}
  
  	a:hover {
  		text-decoration: underline;
  		color: #0000FF;
  	}
  
  	.selected {
  		background:	Highlight;
  		color:		HighlightText;
  	}
  </style>
  <table border="0" cellpadding="0" cellspacing="0">
  	<tr>
  		<td>
  			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  				<thead>
  					<tr>
  						<td width="80">아이디</td>
  						<td width="100">이름</td>
  						<td>이메일</td>
  						<td width="100">가입일자</td>
  					</tr>
  				</thead>
  				<tbody>
  				<!--{@ list}-->
  					<tr>
  						<td>{.user}</td>
  						<td>{.name}</td>
  						<td>{.email}</td>
  						<td>{=date('Y-m-d',.int_date)}</td>
  					</tr>
  				<!--{:}
  					<tr>
  						<td colspan="3">가입한 회원이 없습니다</td>
  					</tr>
  				{/}-->
  				</tbody>
  			</table>
  		</td>
  	</tr>
  	<tr>
  		<td align="center">
  			<wa:paging total="{total}" />
  		</td>
  	</tr>
  </table>
  
  <script type="text/javascript">
  var st1 = new SortableTable(
  	document.getElementById("membertable"),
  	["CaseInsensitiveString", "String", "String", "Date"]
  );
  </script>
  
  <script type="text/javascript">
  var st = new SelectableTableRows(
  	document.getElementById("membertable"),
  	true
  );
  st.onchange = function () {
  	var text = st.getSelectedIndexes().toString();
  	window.status = text;
  };
  
  </script>
  
  


comfuture    04/11/24 21:25:16

  Added:       html/member join.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/member/join.htm
  
  Index: join.htm
  ===================================================================
  <form name="joinform" method="post">
  	아이디 <input type="text" name="user" size="12" /><br />
  	패스워드 <input type="password" name="pass" size="12" /><br />
  	이름 <input type="text" name="name" /><br />
  	이메일 <input type="text" name="email" size="50" /><br />
  	<input type="submit" value="가  입" />
  </form>
  
  


comfuture    04/11/24 21:25:17

  Added:       html/news/admin list.htm write.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/news/admin/list.htm
  
  Index: list.htm
  ===================================================================
  <script type="text/javascript">
  WebApp.Import('sortabletable.js');
  WebApp.Import('selectableelements.js');
  WebApp.Import('selectabletablerows.js');
  WebApp.ImportCSS('sortabletable.css');
  </script>
  <style>
  	body, td, a, div, font {
  		font-size:9pt;
  	}
  
  	a {
  		text-decoration: none;
  		color: #454545;
  	}
  
  	a:hover {
  		text-decoration: underline;
  		color: #0000FF;
  	}
  
  	.selected {
  		background:	Highlight;
  		color:		HighlightText;
  	}
  </style>
  <table border="0" cellpadding="0" cellspacing="0">
  	<tr>
  		<td>
  			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  				<thead>
  					<tr align="center">
  						<td width="60">번호</td>
  						<td>제목</td>
  						<td width="100">작성일자</td>
  					</tr>
  				</thead>
  				<tbody>
  				<!--{@ list}-->
  					<tr>
  						<td align="center">{.num}</td>
  						<td>{.title}</td>
  						<td align="center">{=date('Y-m-d',.int_date)}</td>
  					</tr>
  				<!--{:}
  					<tr align="center">
  						<td colspan="3">작성된 뉴스가 없습니다</td>
  					</tr>
  				{/}-->
  				</tbody>
  			</table>
  		</td>
  	</tr>
  	<tr>
  		<td align="center">
  			<wa:paging total="{total}" />
  		</td>
  	</tr>
  	<tr>
  		<td align="right">
  			<button onclick="location.href = '?act=news.admin.write';">뉴스작성</button>
  		</td>
  	</tr>
  </table>
  
  <script type="text/javascript">
  var st1 = new SortableTable(
  	document.getElementById("membertable"),
  	["CaseInsensitiveString", "String", "String", "Date"]
  );
  </script>
  
  <script type="text/javascript">
  var st = new SelectableTableRows(
  	document.getElementById("membertable"),
  	true
  );
  st.onchange = function () {
  	var text = st.getSelectedIndexes().toString();
  	window.status = text;
  };
  
  </script>
  
  
  1.1                  siminweb/html/news/admin/write.htm
  
  Index: write.htm
  ===================================================================
  <script src="/util/fckeditor/fckeditor.js"></script>
  <style>
  	body, td, a, div, font {
  		font-size:9pt;
  	}
  
  	a {
  		text-decoration: none;
  		color: #454545;
  	}
  
  	a:hover {
  		text-decoration: underline;
  		color: #0000FF;
  	}
  </style>
  <form name="newsform" method="post">
  	<table width="600" cellpadding="0" cellspacing="1">
  		<tr>
  			<td>제목</td>
  			<td><input type="text" size="90" name="title" /></td>
  		</tr>
  		<tr>
  			<td colspan="2">
  			<script>
  				oFCKeditor = new FCKeditor('content','600px','400px');
  				oFCKeditor.Create();
  			</script>
  			</td>
  		</tr>
  		<tr>
  			<td colspan="2">
  				<input type="submit" value="작성완료" />
  			</td>
  		</tr>
  	</table>
  </form>
  </form>
  
  
  


comfuture    04/11/24 21:25:17

  Added:       html/news read.htm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/html/news/read.htm
  
  Index: read.htm
  ===================================================================
  제목: {title} <br />
  내용: <br/> {content}
  
  


comfuture    04/11/24 21:25:18

  Added:       image/icon I.png L.png Lminus.png Lplus.png T.png Tminus.png
                        Tplus.png add_menu.gif ai.gif aif.gif aifc.gif
                        aiff.gif arj.gif arrow.left.png arrow.right.png
                        asf.gif asp.gif au.gif avi.gif bat.gif blank.png
                        bmp.gif cdf.gif cdup.gif cgi.gif chm.gif com.gif
                        compressed.gif css.gif default.gif del_menu.gif
                        delete.gif device.gif dif.gif discuss.gif dll.gif
                        doc.gif downsimple.png dv.gif eml.gif exe.gif
                        file.png flv.gif fnt.gif folder.png fon.gif
                        gear.gif gif.gif gz.gif hdd.gif host.gif htm.gif
                        html.gif html.png hwp.gif icon.gif icon02.gif
                        iff.gif image.gif information.gif jfif.gif jpeg.gif
                        jpg.gif js.gif lhz.gif lzh.gif mac.gif madang.png
                        mht.gif midi.gif mixed.gif mov.gif movie.gif
                        mp2.gif mp3.gif mpeg.gif mpg.gif msi.gif nsi.gif
                        nws.gif openfolder.png option.gif pcx.gif pdf.gif
                        png.gif ppt.gif ps.gif psd.gif qif.gif qt.gif
                        qti.gif qtif.gif question.gif ra.gif ram.gif
                        rar.gif reg.gif reload.gif remote_host.gif rle.gif
                        rpm.gif rv.gif shared_folder.gif shared_hdd.gif
                        sound.gif spl.gif swf.gif sys.gif tar.gif text.gif
                        tga.gif tgz.gif tif.gif tiff.gif trash.gif
                        trash_empty.gif trash_full.gif ttf.gif txt.gif
                        unknown.gif upsimple.png url.gif wav.gif wizard.gif
                        wma.gif wmf.gif wmv.gif xls.gif z.gif zip.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/image/icon/I.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/L.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/Lminus.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/Lplus.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/T.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/Tminus.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/Tplus.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/add_menu.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ai.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/aif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/aifc.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/aiff.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/arj.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/arrow.left.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/arrow.right.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/asf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/asp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/au.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/avi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/bat.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/blank.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/bmp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/cdf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/cdup.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/cgi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/chm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/com.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/compressed.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/css.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/default.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/del_menu.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/delete.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/device.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/dif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/discuss.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/dll.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/doc.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/downsimple.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/dv.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/eml.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/exe.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/file.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/flv.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/fnt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/folder.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/fon.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/gear.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/gif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/gz.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/hdd.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/host.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/htm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/html.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/html.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/hwp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/icon.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/icon02.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/iff.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/image.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/information.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/jfif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/jpeg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/jpg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/js.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/lhz.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/lzh.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mac.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/madang.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mht.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/midi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mixed.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mov.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/movie.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mp2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mp3.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mpeg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/mpg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/msi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/nsi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/nws.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/openfolder.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/option.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/pcx.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/pdf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/png.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ppt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ps.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/psd.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/qif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/qt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/qti.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/qtif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/question.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ra.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ram.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/rar.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/reg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/reload.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/remote_host.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/rle.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/rpm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/rv.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/shared_folder.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/shared_hdd.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/sound.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/spl.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/swf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/sys.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/tar.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/text.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/tga.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/tgz.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/tif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/tiff.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/trash.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/trash_empty.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/trash_full.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/ttf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/txt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/unknown.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/upsimple.png
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/url.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/wav.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/wizard.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/wma.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/wmf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/wmv.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/xls.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/z.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/image/icon/zip.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:18

  Added:       js       WebApp.js alert.js lib.accordion.js lib.paging.js
                        mozhello.xml selectableelements.js
                        selectabletablerows.js sortabletable.js
                        stringbuilder.js xloadtree.js xmlextras.js xtree.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/js/WebApp.js
  
  Index: WebApp.js
  ===================================================================
  /**
  * ϸ: WebApp.js
  *   : ũƮ δ
  * ۼ: ģ
  *   ¥: 2004-09-06
  *
  ***********************************************
  */
  
  WebApp = {
  	jar: new Array,
  	Import: function(file) {
  		for(var i=0; i<WebApp.jar.length; i++) {
  			if (WebApp.jar[i] == file) return;
  		}
  		if (document.readyState == 'complete') {
  			var s = document.createElement('SCRIPT');
  			s.src = '/js/'+file;
  			document.body.appendChild(s);
  		} else {
  			document.write('<s'+'cript src="/js/'+file+'"></s'+'cript>');
  		}
  		WebApp.jar[WebApp.jar.length] = file;
  	},
  	ImportCSS: function(file) {
  		for(var i=0; i<WebApp.jar.length; i++) {
  			if (WebApp.jar[i] == file) return;
  		}
  		document.write('<l'+'ink rel="stylesheet" type="text/css" href="/css/'+file+'" />');
  		WebApp.jar[WebApp.jar.length] = file;
  	},
  	resizeImage: function(el) {
  		var container = el.offsetParent;
  		el.width = 1;
  		el.width = container.offsetWidth - 20;
  	}
  }
  
  //Image.onload = Image.onerror = WebApp.resizeImage;
  
  
  1.1                  siminweb/js/alert.js
  
  Index: alert.js
  ===================================================================
  function doAlert() {
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	// dymmy long long strings;
  	alert('Hello, world');
  }
  
  
  1.1                  siminweb/js/lib.accordion.js
  
  Index: lib.accordion.js
  ===================================================================
  function accordion(Id, interval, to)
  {
  	var obj = document.getElementById(Id);
  	var H, step = 5;
  
  	if (obj == null) return;
  	if (to == undefined) { // user clicking
  		if (obj._slideStart == true) return;
  		if (obj._expand == true) {
  			to = 0;
  			obj.style.overflow = "hidden";
  		} else {
  			accordion.addId(Id);
  			for(var i=0; i < accordion.objects.length; i++) {
  				if (accordion.objects[i].id != Id && accordion.objects[i]._expand == true) {
  					accordion(accordion.objects[i].id);
  				}
  			}
  
  			obj.style.height = "";
  			obj.style.overflow = "";
  			obj.style.display = "block";
  			to = obj.offsetHeight; // ̰̰
  			obj.style.overflow = "hidden";
  			obj.style.height = "1px";
  		}
  		obj._slideStart = true;
  	}
  	
  	step             = ((to > 0) ? 1:-1) * step;
  	interval         = ((interval==undefined)?1:interval);
  
  	obj.style.height = (H=((H=(isNaN(H=parseInt(obj.style.height))?0:H))+step<0)?0:H+step)+"px";
  	
  	
  	if (H <= 0) {
  		obj.style.display = "none";
  		obj.style.overflow = "hidden";
  		obj._expand = false;
  		obj._slideStart = false;
  	} else if (to > 0 && H >= to) {
  		obj.style.display = "block";
  		obj.style.overflow = "visible";
  		obj.style.height = H + "px";
  		obj._expand = true;
  		obj._slideStart = false;
  	} else {
  		setTimeout("accordion('"+Id+"' , "+interval+", "+to+");", interval);
  	}
  }
  accordion.objects = new Array();
  accordion.addId = function(Id)
  {
  	for (var i=0; i < accordion.objects.length; i++) {
  		if (accordion.objects[i].id == Id) return true;
  	}
  	accordion.objects[accordion.objects.length] = document.getElementById(Id);
  }
  
  
  1.1                  siminweb/js/lib.paging.js
  
  Index: lib.paging.js
  ===================================================================
  /**
  * 파일명: lib.paging.js
  * 설  명: 페이지바 출력하기
  * 작성자: 거친마루
  * 날  짜: 2004-02-04
  *
  ***********************************************
  * 2004-02-05 맨처음, 맨마지막 페이지 링크 추가하고, 보여줌 안보여줌 속성을 선택할 수 있도록 수정 - by 거친마루
  * 2004-02-05 QueryString 오브젝트 개선 - by lainTT
  * 2004-03-?? 페이지 넘버링 스타일을 설정할 수 있도록 수정, (페이지번호= %n) - by 거친마루
  * 2004-03-?? 페이지 지시자를 page 아닌 다른것으로 사용할 수 있도록 확장 - by 거친마루
  * 2004-03-19 QueryString에 baseName 프로퍼티 추가 - by 거친마루
  */
  
  QueryString = function(str) {
  	var str = str ? str : document.location.href;
  	this.argv = new Array();
  	this.baseName = str.split('?')[0];
  	this.queryString = str.replace(/^[^\?]+\?/, '').replace(/#(.*)$/, '');
  	if (!this.queryString) this.queryString = '';
  	var _argv = this.queryString.split('&');
  	for(var i=0; i<_argv.length; i++) {
  		var _key = _argv[i].substring(0, _argv[i].indexOf('='));
  		var _val = _argv[i].substring(_argv[i].indexOf('=')+1);
  		if(!_key || _argv[i].indexOf('=') == -1) continue;
  		this.argv[_key] = _val;
  	}
  }
  
  QueryString.prototype.setVar = function(key,val) {
  	if (typeof key == 'object') {
  		for (var item in key) this.argv[item] = key[item];
  	} else {
  		this.argv[key] = val;
  	}
  	return this.getVar();
  }
  
  QueryString.prototype.getVar = function(key) {
  	if (key) {
  		return this.argv[key] ? this.argv[key] : '';
  	} else {
  		var _item = new Array();
  		for (var x in this.argv) {
  			if (this.argv[x]) _item[_item.length] = x + '=' + this.argv[x];
  			else continue;
  		}
  		return this.baseName + '?' + _item.join('&');
  	}
  }
  
  Paging = function(total) {
  	this.config = {
  		pageVariable: 'page',
  		numberFormat: '[%n]',
  		showFirstLast: true,	// 맨처음, 맨 마지막으로 가는 링크를 만들것인가.
  		thisPageStyle: 'font-weight: bold;',
  		otherPageStyle: 'font-size: 9pt',
  		itemPerPage: 10,	// 리스트 목록수
  		pagePerView: 10,	// 페이지당 네비게이션 항목수
  		prevIcon: null,	// 이전페이지 아이콘
  		nextIcon: null,	// 다음페이지 아이콘
  		firstIcon: null,	// 첫페이지로 아이콘
  		lastIcon: null	// 마지막페이지 아이콘
  	}
  
  	this.totalItem = total;
  	this.qs = new QueryString;
  
  	this.calculate = function() {
  		this.totalPage = Math.ceil(this.totalItem / this.config.itemPerPage);
  		this.currentPage = this.qs.getVar(this.config.pageVariable);
  		if (!this.currentPage) this.currentPage = 1;
  		if (this.currentPage > this.totalPage) this.currentPage = this.totalPage;
  		this.lastPageItems = this.totalPage % this.config.itemPerPage;
  
  		this.prevPage = this.currentPage-1;
  		this.nextPage = this.currentPage+1;
  		this.seek = this.prevPage * this.config.itemPerPage;
  		this.currentScale = parseInt(this.currentPage / this.config.pagePerView);
  		if (this.currentPage % this.config.pagePerView < 1) this.currentScale--;
  		this.totalScale = parseInt(this.totalPage / this.config.pagePerView);
  		this.lastScalePages = this.totalPage % this.config.pagePerView;
  		if (this.lastScalePages == 0) this.totalScale--;
  		this.prevPage = this.currentScale * this.config.pagePerView;
  		this.nextPage = this.prevPage + this.config.pagePerView + 1;
  	}
  
  	this.toString = function() {
  		var ss, se;
  		var firstBtn = '';
  		var lastBtn = '';
  		var prevBtn = '';
  		var nextBtn = '';
  
  		this.calculate();
  
  		if (this.config.showFirstLast) {
  			if (this.config.firstIcon) firstBtn = '<img src="'+this.config.firstIcon+'" border="0" align="absmiddle">';
  			else firstBtn = '[처음]'; //'☜';
  			firstBtn = firstBtn.link(this.qs.setVar(this.config.pageVariable,1));
  
  			if (this.config.lastIcon) lastBtn = '<img src="'+this.config.lastIcon+'" border="0" align="absmiddle">';
  			else lastBtn = '[마지막]'; //'☞';
  			lastBtn = lastBtn.link(this.qs.setVar(this.config.pageVariable,this.totalPage));
  		} else {
  			firstBtn = lastBtn = '';
  		}
  
  		if (this.config.prevIcon) prevBtn ='<img src="'+this.config.prevIcon+'" border="0" align="absmiddle">';
  		else prevBtn = '◀';
  		if (this.currentPage > this.config.pagePerView) {
  			prevBtn = prevBtn.link(this.qs.setVar(this.config.pageVariable,this.prevPage));
  		}
  
  		ss = this.prevPage + 1;
  		if ((this.currentScale >= this.totalScale) && (this.lastScalePages != 0)) se = ss + this.lastScalePages;
  		else if (this.currentScale <= -1) se = ss;
  		else se = ss + this.config.pagePerView;
  
  		var navBtn = '';
  		for(var i = ss; i<se; i++) {
  			var pageText = this.config.numberFormat.replace(/%n/g,i);
  			if (i == this.currentPage) {
  				_btn = '<span style="'+this.config.thisPageStyle+'">'+pageText+'</span>';
  			} else {
  				_btn = '<a href="'+this.qs.setVar(this.config.pageVariable,i)+'" style="'+this.config.otherPageStyle+'">'+pageText+'</a>'
  			}
  			navBtn+=_btn;
  		}
  
  		if (this.config.prevIcon) nextBtn ='<img src="'+this.config.nextIcon+'" border="0" align="absmiddle">';
  		else nextBtn = '▶';
  		if (this.totalPage > this.nextPage) {
  			nextBtn = nextBtn.link(this.qs.setVar(this.config.pageVariable,this.nextPage));
  		}
  		return firstBtn+' '+prevBtn+navBtn+nextBtn+' '+lastBtn;
  	}
  }
  
  
  1.1                  siminweb/js/mozhello.xml
  
  Index: mozhello.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
  
  	<binding id="hello" applyauthorstyles="true">
  	<content>
  		<html:span style="position: relative; white-space: nowrap; float: left; clear: both; width: auto; height: auto; display: inline; padding: 0; margin: 0; border: 0; border-bottom: 1px solid transparent; background: transparent;">
  			<children/>
  		</html:span>
  	</content>
  		<implementation>
  
  			<property name="name"
  				onset="this.setName(val);"
  				onget="return this.getName();"
  			/>
  
  			<constructor>
  				<![CDATA[
  					var el = this;
  					this.innerContainer	= document.getAnonymousNodes(el)[0];
  					this.redraw(this.getAttribute('NAME'));
  				]]>
  			</constructor>
  
  			<method name="setName">
  				<parameter name="newname" />
  				<body>
  					<![CDATA[
  						this.redraw(newname);
  					]]>
  				</body>
  			</method>
  
  			<method name="getName">
  				<body>
  					<![CDATA[
  						return this.name;
  					]]>
  				</body>
  			</method>
  
  			<method name="redraw">
  				<parameter name="name" />
  				<body>
  					<![CDATA[
  						if (name == undefined) name = " World";
  						this.innerContainer.innerHTML = "Hello, " + name;
  					]]>
  				</body>
  			</method>
  
  		</implementation>
  	</binding>
  </bindings>
  
  
  1.1                  siminweb/js/selectableelements.js
  
  Index: selectableelements.js
  ===================================================================
  /*----------------------------------------------------------------------------\
  |                          Selectable Elements 1.02                           |
  |-----------------------------------------------------------------------------|
  |                         Created by Erik Arvidsson                           |
  |                  (http://webfx.eae.net/contact.html#erik)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  |          A script that allows children of any element to be selected        |
  |-----------------------------------------------------------------------------|
  |                  Copyright (c) 1999 - 2004 Erik Arvidsson                   |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | 2002-09-19 | Original Version Posted.                                       |
  | 2002-09-27 | Fixed a bug in IE when mouse down and up occured on different  |
  |            | rows.                                                          |
  | 2003-02-11 | Minor problem with addClassName and removeClassName that       |
  |            | triggered a bug in Opera 7. Added destroy method               |
  |-----------------------------------------------------------------------------|
  | Created 2002-09-04 | All changes are in the log above. | Updated 2003-02-11 |
  \----------------------------------------------------------------------------*/
  
  function SelectableElements(oElement, bMultiple) {
  	if (oElement == null)
  		return;
  
  	this._htmlElement = oElement;
  	this._multiple = Boolean(bMultiple);
  
  	this._selectedItems = [];
  	this._fireChange = true;
  
  	var oThis = this;
  	this._onclick = function (e) {
  		if (e == null) e = oElement.ownerDocument.parentWindow.event;
  		oThis.click(e);
  	};
  
  	if (oElement.addEventListener)
  		oElement.addEventListener("click", this._onclick, false);
  	else if (oElement.attachEvent)
  		oElement.attachEvent("onclick", this._onclick);
  }
  
  SelectableElements.prototype.setItemSelected = function (oEl, bSelected) {
  	if (!this._multiple) {
  		if (bSelected) {
  			var old = this._selectedItems[0]
  			if (oEl == old)
  				return;
  			if (old != null)
  				this.setItemSelectedUi(old, false);
  			this.setItemSelectedUi(oEl, true);
  			this._selectedItems = [oEl];
  			this.fireChange();
  		}
  		else {
  			if (this._selectedItems[0] == oEl) {
  				this.setItemSelectedUi(oEl, false);
  				this._selectedItems = [];
  			}
  		}
  	}
  	else {
  		if (Boolean(oEl._selected) == Boolean(bSelected))
  			return;
  
  		this.setItemSelectedUi(oEl, bSelected);
  
  		if (bSelected)
  			this._selectedItems[this._selectedItems.length] = oEl;
  		else {
  			// remove
  			var tmp = [];
  			var j = 0;
  			for (var i = 0; i < this._selectedItems.length; i++) {
  				if (this._selectedItems[i] != oEl)
  					tmp[j++] = this._selectedItems[i];
  			}
  			this._selectedItems = tmp;
  		}
  		this.fireChange();
  	}
  };
  
  // This method updates the UI of the item
  SelectableElements.prototype.setItemSelectedUi = function (oEl, bSelected) {
  	if (bSelected)
  		addClassName(oEl, "selected");
  	else
  		removeClassName(oEl, "selected");
  
  	oEl._selected = bSelected;
  };
  
  SelectableElements.prototype.getItemSelected = function (oEl) {
  	return Boolean(oEl._selected);
  };
  
  SelectableElements.prototype.fireChange = function () {
  	if (!this._fireChange)
  		return;
  	if (typeof this.onchange == "string")
  		this.onchange = new Function(this.onchange);
  	if (typeof this.onchange == "function")
  		this.onchange();
  };
  
  
  SelectableElements.prototype.click = function (e) {
  	var oldFireChange = this._fireChange;
  	this._fireChange = false;
  
  	// create a copy to compare with after changes
  	var selectedBefore = this.getSelectedItems();	// is a cloned array
  
  	// find row
  	var el = e.target != null ? e.target : e.srcElement;
  	while (el != null && !this.isItem(el))
  		el = el.parentNode;
  
  	if (el == null) {	// happens in IE when down and up occur on different items
  		this._fireChange = oldFireChange;
  		return;
  	}
  
  	var rIndex = el;
  	var aIndex = this._anchorIndex;
  
  	// test whether the current row should be the anchor
  	if (this._selectedItems.length == 0 || (e.ctrlKey && !e.shiftKey && this._multiple)) {
  		aIndex = this._anchorIndex = rIndex;
  	}
  
  	if (!e.ctrlKey && !e.shiftKey || !this._multiple) {
  		// deselect all
  		var items = this._selectedItems;
  		for (var i = items.length - 1; i >= 0; i--) {
  			if (items[i]._selected && items[i] != el)
  				this.setItemSelectedUi(items[i], false);
  		}
  		this._anchorIndex = rIndex;
  		if (!el._selected) {
  			this.setItemSelectedUi(el, true);
  		}
  		this._selectedItems = [el];
  	}
  
  	// ctrl
  	else if (this._multiple && e.ctrlKey && !e.shiftKey) {
  		this.setItemSelected(el, !el._selected);
  		this._anchorIndex = rIndex;
  	}
  
  	// ctrl + shift
  	else if (this._multiple && e.ctrlKey && e.shiftKey) {
  		// up or down?
  		var dirUp = this.isBefore(rIndex, aIndex);
  
  		var item = aIndex;
  		while (item != null && item != rIndex) {
  			if (!item._selected && item != el)
  				this.setItemSelected(item, true);
  			item = dirUp ? this.getPrevious(item) : this.getNext(item);
  		}
  
  		if (!el._selected)
  			this.setItemSelected(el, true);
  	}
  
  	// shift
  	else if (this._multiple && !e.ctrlKey && e.shiftKey) {
  		// up or down?
  		var dirUp = this.isBefore(rIndex, aIndex);
  
  		// deselect all
  		var items = this._selectedItems;
  		for (var i = items.length - 1; i >= 0; i--)
  			this.setItemSelectedUi(items[i], false);
  		this._selectedItems = [];
  
  		// select items in range
  		var item = aIndex;
  		while (item != null) {
  			this.setItemSelected(item, true);
  			if (item == rIndex)
  				break;
  			item = dirUp ? this.getPrevious(item) : this.getNext(item);
  		}
  	}
  
  	// find change!!!
  	var found;
  	var changed = selectedBefore.length != this._selectedItems.length;
  	if (!changed) {
  		for (var i = 0; i < selectedBefore.length; i++) {
  			found = false;
  			for (var j = 0; j < this._selectedItems.length; j++) {
  				if (selectedBefore[i] == this._selectedItems[j]) {
  					found = true;
  					break;
  				}
  			}
  			if (!found) {
  				changed = true;
  				break;
  			}
  		}
  	}
  
  	this._fireChange = oldFireChange;
  	if (changed && this._fireChange)
  		this.fireChange();
  };
  
  SelectableElements.prototype.getSelectedItems = function () {
  	//clone
  	var items = this._selectedItems;
  	var l = items.length;
  	var tmp = new Array(l);
  	for (var i = 0; i < l; i++)
  		tmp[i] = items[i];
  	return tmp;
  };
  
  SelectableElements.prototype.isItem = function (node) {
  	return node != null && node.nodeType == 1 && node.parentNode == this._htmlElement;
  };
  
  SelectableElements.prototype.destroy = function () {
  	if (this._htmlElement.removeEventListener)
  		this._htmlElement.removeEventListener("click", this._onclick, false);
  	else if (this._htmlElement.detachEvent)
  		this._htmlElement.detachEvent("onclick", this._onclick);
  
  	this._htmlElement = null;
  	this._onclick = null;
  	this._selectedItems = null;
  };
  
  /* Traversable Collection Interface */
  
  SelectableElements.prototype.getNext = function (el) {
  	var n = el.nextSibling;
  	if (n == null || this.isItem(n))
  		return n;
  	return this.getNext(n);
  };
  
  SelectableElements.prototype.getPrevious = function (el) {
  	var p = el.previousSibling;
  	if (p == null || this.isItem(p))
  		return p;
  	return this.getPrevious(p);
  };
  
  SelectableElements.prototype.isBefore = function (n1, n2) {
  	var next = this.getNext(n1);
  	while (next != null) {
  		if (next == n2)
  			return true;
  		next = this.getNext(next);
  	}
  	return false;
  };
  
  /* End Traversable Collection Interface */
  
  /* Indexable Collection Interface */
  
  SelectableElements.prototype.getItems = function () {
  	var tmp = [];
  	var j = 0;
  	var cs = this._htmlElement.childNodes;
  	var l = cs.length;
  	for (var i = 0; i < l; i++) {
  		if (cs[i].nodeType == 1)
  			tmp[j++] = cs[i]
  	}
  	return tmp;
  };
  
  SelectableElements.prototype.getItem = function (nIndex) {
  	var j = 0;
  	var cs = this._htmlElement.childNodes;
  	var l = cs.length;
  	for (var i = 0; i < l; i++) {
  		if (cs[i].nodeType == 1) {
  			if (j == nIndex)
  				return cs[i];
  			j++;
  		}
  	}
  	return null;
  };
  
  SelectableElements.prototype.getSelectedIndexes = function () {
  	var items = this.getSelectedItems();
  	var l = items.length;
  	var tmp = new Array(l);
  	for (var i = 0; i < l; i++)
  		tmp[i] = this.getItemIndex(items[i]);
  	return tmp;
  };
  
  
  SelectableElements.prototype.getItemIndex = function (el) {
  	var j = 0;
  	var cs = this._htmlElement.childNodes;
  	var l = cs.length;
  	for (var i = 0; i < l; i++) {
  		if (cs[i] == el)
  			return j;
  		if (cs[i].nodeType == 1)
  			j++;
  	}
  	return -1;
  };
  
  /* End Indexable Collection Interface */
  
  
  
  function addClassName(el, sClassName) {
  	var s = el.className;
  	var p = s.split(" ");
  	if (p.length == 1 && p[0] == "")
  		p = [];
  
  	var l = p.length;
  	for (var i = 0; i < l; i++) {
  		if (p[i] == sClassName)
  			return;
  	}
  	p[p.length] = sClassName;
  	el.className = p.join(" ");
  }
  
  function removeClassName(el, sClassName) {
  	var s = el.className;
  	var p = s.split(" ");
  	var np = [];
  	var l = p.length;
  	var j = 0;
  	for (var i = 0; i < l; i++) {
  		if (p[i] != sClassName)
  			np[j++] = p[i];
  	}
  	el.className = np.join(" ");
  }
  
  
  1.1                  siminweb/js/selectabletablerows.js
  
  Index: selectabletablerows.js
  ===================================================================
  /*----------------------------------------------------------------------------\
  |                          Selectable Elements 1.02                           |
  |-----------------------------------------------------------------------------|
  |                         Created by Erik Arvidsson                           |
  |                  (http://webfx.eae.net/contact.html#erik)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  |          A script that allows children of any element to be selected        |
  |-----------------------------------------------------------------------------|
  |                  Copyright (c) 1999 - 2004 Erik Arvidsson                   |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | 2002-09-19 | Original Version Posted.                                       |
  | 2002-09-27 | Fixed a bug in IE when mouse down and up occured on different  |
  |            | rows.                                                          |
  | 2003-02-11 | Minor problem with addClassName and removeClassName that       |
  |            | triggered a bug in Opera 7. Added destroy method               |
  |-----------------------------------------------------------------------------|
  | Created 2002-09-04 | All changes are in the log above. | Updated 2003-02-11 |
  \----------------------------------------------------------------------------*/
  
  /*----------------------------------------------------------------------------\
  | This file requires that SelectableElements is first defined. This class can |
  | be found in the file selectableelements.js at WebFX                         |
  \----------------------------------------------------------------------------*/
  
  function SelectableTableRows(oTableElement, bMultiple) {
  	SelectableElements.call(this, oTableElement, bMultiple);
  }
  SelectableTableRows.prototype = new SelectableElements;
  
  SelectableTableRows.prototype.isItem = function (node) {
  	return node != null && node.tagName == "TR" &&
  		node.parentNode.tagName == "TBODY" &&
  		node.parentNode.parentNode == this._htmlElement;
  };
  
  /* Indexable Collection Interface */
  
  SelectableTableRows.prototype.getItems = function () {
  	return this._htmlElement.rows;
  };
  
  SelectableTableRows.prototype.getItemIndex = function (el) {
  	return el.rowIndex;
  };
  
  SelectableTableRows.prototype.getItem = function (i) {
  	return this._htmlElement.rows[i];
  };
  
  /* End Indexable Collection Interface */
  
  
  1.1                  siminweb/js/sortabletable.js
  
  Index: sortabletable.js
  ===================================================================
  
  /*----------------------------------------------------------------------------\
  |                            Sortable Table 1.12                              |
  |-----------------------------------------------------------------------------|
  |                         Created by Erik Arvidsson                           |
  |                  (http://webfx.eae.net/contact.html#erik)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  | A DOM 1 based script that allows an ordinary HTML table to be sortable.     |
  |-----------------------------------------------------------------------------|
  |                  Copyright (c) 1998 - 2004 Erik Arvidsson                   |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | 2003-01-10 | First version                                                  |
  | 2003-01-19 | Minor changes to the date parsing                              |
  | 2003-01-28 | JScript 5.0 fixes (no support for 'in' operator)               |
  | 2003-02-01 | Sloppy typo like error fixed in getInnerText                   |
  | 2003-07-04 | Added workaround for IE cellIndex bug.                         |
  | 2003-11-09 | The bDescending argument to sort was not correctly working     |
  |            | Using onclick DOM0 event if no support for addEventListener    |
  |            | or attachEvent                                                 |
  | 2004-01-13 | Adding addSortType and removeSortType which makes it a lot     |
  |            | easier to add new, custom sort types.                          |
  | 2004-01-27 | Switch to use descending = false as the default sort order.    |
  |            | Change defaultDescending to suit your needs.                   |
  | 2004-03-14 | Improved sort type None look and feel a bit                    |
  | 2004-08-26 | Made the handling of tBody and tHead more flexible. Now you    |
  |            | can use another tHead or no tHead, and you can chose some      |
  |            | other tBody.                                                   |
  |-----------------------------------------------------------------------------|
  | Created 2003-01-10 | All changes are in the log above. | Updated 2004-08-26 |
  \----------------------------------------------------------------------------*/
  
  
  function SortableTable(oTable, oSortTypes) {
  
  	this.sortTypes = oSortTypes || [];
  
  	this.sortColumn = null;
  	this.descending = null;
  
  	var oThis = this;
  	this._headerOnclick = function (e) {
  		oThis.headerOnclick(e);
  	};
  
  	if (oTable) {
  		this.setTable( oTable );
  		this.document = oTable.ownerDocument || oTable.document;
  	}
  	else {
  		this.document = document;
  	}
  
  
  	// only IE needs this
  	var win = this.document.defaultView || this.document.parentWindow;
  	this._onunload = function () {
  		oThis.destroy();
  	};
  	if (win && typeof win.attachEvent != "undefined") {
  		win.attachEvent("onunload", this._onunload);
  	}
  }
  
  SortableTable.gecko = navigator.product == "Gecko";
  SortableTable.msie = /msie/i.test(navigator.userAgent);
  // Mozilla is faster when doing the DOM manipulations on
  // an orphaned element. MSIE is not
  SortableTable.removeBeforeSort = SortableTable.gecko;
  
  SortableTable.prototype.onsort = function () {};
  
  // default sort order. true -> descending, false -> ascending
  SortableTable.prototype.defaultDescending = false;
  
  // shared between all instances. This is intentional to allow external files
  // to modify the prototype
  SortableTable.prototype._sortTypeInfo = {};
  
  SortableTable.prototype.setTable = function (oTable) {
  	if ( this.tHead )
  		this.uninitHeader();
  	this.element = oTable;
  	this.setTHead( oTable.tHead );
  	this.setTBody( oTable.tBodies[0] );
  };
  
  SortableTable.prototype.setTHead = function (oTHead) {
  	if (this.tHead && this.tHead != oTHead )
  		this.uninitHeader();
  	this.tHead = oTHead;
  	this.initHeader( this.sortTypes );
  };
  
  SortableTable.prototype.setTBody = function (oTBody) {
  	this.tBody = oTBody;
  };
  
  SortableTable.prototype.setSortTypes = function ( oSortTypes ) {
  	if ( this.tHead )
  		this.uninitHeader();
  	this.sortTypes = oSortTypes || [];
  	if ( this.tHead )
  		this.initHeader( this.sortTypes );
  };
  
  // adds arrow containers and events
  // also binds sort type to the header cells so that reordering columns does
  // not break the sort types
  SortableTable.prototype.initHeader = function (oSortTypes) {
  	if (!this.tHead) return;
  	var cells = this.tHead.rows[0].cells;
  	var doc = this.tHead.ownerDocument || this.tHead.document;
  	this.sortTypes = oSortTypes || [];
  	var l = cells.length;
  	var img, c;
  	for (var i = 0; i < l; i++) {
  		c = cells[i];
  		if (this.sortTypes[i] != null && this.sortTypes[i] != "None") {
  			img = doc.createElement("IMG");
  			img.src = "/image/icon/blank.png";
  			c.appendChild(img);
  			if (this.sortTypes[i] != null)
  				c._sortType = this.sortTypes[i];
  			if (typeof c.addEventListener != "undefined")
  				c.addEventListener("click", this._headerOnclick, false);
  			else if (typeof c.attachEvent != "undefined")
  				c.attachEvent("onclick", this._headerOnclick);
  			else
  				c.onclick = this._headerOnclick;
  		}
  		else
  		{
  			c.setAttribute( "_sortType", oSortTypes[i] );
  			c._sortType = "None";
  		}
  	}
  	this.updateHeaderArrows();
  };
  
  // remove arrows and events
  SortableTable.prototype.uninitHeader = function () {
  	if (!this.tHead) return;
  	var cells = this.tHead.rows[0].cells;
  	var l = cells.length;
  	var c;
  	for (var i = 0; i < l; i++) {
  		c = cells[i];
  		if (c._sortType != null && c._sortType != "None") {
  			c.removeChild(c.lastChild);
  			if (typeof c.removeEventListener != "undefined")
  				c.removeEventListener("click", this._headerOnclick, false);
  			else if (typeof c.detachEvent != "undefined")
  				c.detachEvent("onclick", this._headerOnclick);
  			c._sortType = null;
  			c.removeAttribute( "_sortType" );
  		}
  	}
  };
  
  SortableTable.prototype.updateHeaderArrows = function () {
  	if (!this.tHead) return;
  	var cells = this.tHead.rows[0].cells;
  	var l = cells.length;
  	var img;
  	for (var i = 0; i < l; i++) {
  		if (cells[i]._sortType != null && cells[i]._sortType != "None") {
  			img = cells[i].lastChild;
  			if (i == this.sortColumn)
  				img.className = "sort-arrow " + (this.descending ? "descending" : "ascending");
  			else
  				img.className = "sort-arrow";
  		}
  	}
  };
  
  SortableTable.prototype.headerOnclick = function (e) {
  	// find TD element
  	var el = e.target || e.srcElement;
  	while (el.tagName != "TD")
  		el = el.parentNode;
  
  	this.sort(SortableTable.msie ? SortableTable.getCellIndex(el) : el.cellIndex);
  };
  
  // IE returns wrong cellIndex when columns are hidden
  SortableTable.getCellIndex = function (oTd) {
  	var cells = oTd.parentNode.childNodes
  	var l = cells.length;
  	var i;
  	for (i = 0; cells[i] != oTd && i < l; i++)
  		;
  	return i;
  };
  
  SortableTable.prototype.getSortType = function (nColumn) {
  	return this.sortTypes[nColumn] || "String";
  };
  
  // only nColumn is required
  // if bDescending is left out the old value is taken into account
  // if sSortType is left out the sort type is found from the sortTypes array
  
  SortableTable.prototype.sort = function (nColumn, bDescending, sSortType) {
  	if (!this.tBody) return;
  	if (sSortType == null)
  		sSortType = this.getSortType(nColumn);
  
  	// exit if None
  	if (sSortType == "None")
  		return;
  
  	if (bDescending == null) {
  		if (this.sortColumn != nColumn)
  			this.descending = this.defaultDescending;
  		else
  			this.descending = !this.descending;
  	}
  	else
  		this.descending = bDescending;
  
  	this.sortColumn = nColumn;
  
  	if (typeof this.onbeforesort == "function")
  		this.onbeforesort();
  
  	var f = this.getSortFunction(sSortType, nColumn);
  	var a = this.getCache(sSortType, nColumn);
  	var tBody = this.tBody;
  
  	a.sort(f);
  
  	if (this.descending)
  		a.reverse();
  
  	if (SortableTable.removeBeforeSort) {
  		// remove from doc
  		var nextSibling = tBody.nextSibling;
  		var p = tBody.parentNode;
  		p.removeChild(tBody);
  	}
  
  	// insert in the new order
  	var l = a.length;
  	for (var i = 0; i < l; i++)
  		tBody.appendChild(a[i].element);
  
  	if (SortableTable.removeBeforeSort) {
  		// insert into doc
  		p.insertBefore(tBody, nextSibling);
  	}
  
  	this.updateHeaderArrows();
  
  	this.destroyCache(a);
  
  	if (typeof this.onsort == "function")
  		this.onsort();
  };
  
  SortableTable.prototype.asyncSort = function (nColumn, bDescending, sSortType) {
  	var oThis = this;
  	this._asyncsort = function () {
  		oThis.sort(nColumn, bDescending, sSortType);
  	};
  	window.setTimeout(this._asyncsort, 1);
  };
  
  SortableTable.prototype.getCache = function (sType, nColumn) {
  	if (!this.tBody) return [];
  	var rows = this.tBody.rows;
  	var l = rows.length;
  	var a = new Array(l);
  	var r;
  	for (var i = 0; i < l; i++) {
  		r = rows[i];
  		a[i] = {
  			value:		this.getRowValue(r, sType, nColumn),
  			element:	r
  		};
  	};
  	return a;
  };
  
  SortableTable.prototype.destroyCache = function (oArray) {
  	var l = oArray.length;
  	for (var i = 0; i < l; i++) {
  		oArray[i].value = null;
  		oArray[i].element = null;
  		oArray[i] = null;
  	}
  };
  
  SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {
  	// if we have defined a custom getRowValue use that
  	if (this._sortTypeInfo[sType] && this._sortTypeInfo[sType].getRowValue)
  		return this._sortTypeInfo[sType].getRowValue(oRow, nColumn);
  
  	var s;
  	var c = oRow.cells[nColumn];
  	if (typeof c.innerText != "undefined")
  		s = c.innerText;
  	else
  		s = SortableTable.getInnerText(c);
  	return this.getValueFromString(s, sType);
  };
  
  SortableTable.getInnerText = function (oNode) {
  	var s = "";
  	var cs = oNode.childNodes;
  	var l = cs.length;
  	for (var i = 0; i < l; i++) {
  		switch (cs[i].nodeType) {
  			case 1: //ELEMENT_NODE
  				s += SortableTable.getInnerText(cs[i]);
  				break;
  			case 3:	//TEXT_NODE
  				s += cs[i].nodeValue;
  				break;
  		}
  	}
  	return s;
  };
  
  SortableTable.prototype.getValueFromString = function (sText, sType) {
  	if (this._sortTypeInfo[sType])
  		return this._sortTypeInfo[sType].getValueFromString( sText );
  	return sText;
  	/*
  	switch (sType) {
  		case "Number":
  			return Number(sText);
  		case "CaseInsensitiveString":
  			return sText.toUpperCase();
  		case "Date":
  			var parts = sText.split("-");
  			var d = new Date(0);
  			d.setFullYear(parts[0]);
  			d.setDate(parts[2]);
  			d.setMonth(parts[1] - 1);
  			return d.valueOf();
  	}
  	return sText;
  	*/
  	};
  
  SortableTable.prototype.getSortFunction = function (sType, nColumn) {
  	if (this._sortTypeInfo[sType])
  		return this._sortTypeInfo[sType].compare;
  	return SortableTable.basicCompare;
  };
  
  SortableTable.prototype.destroy = function () {
  	this.uninitHeader();
  	var win = this.document.parentWindow;
  	if (win && typeof win.detachEvent != "undefined") {	// only IE needs this
  		win.detachEvent("onunload", this._onunload);
  	}
  	this._onunload = null;
  	this.element = null;
  	this.tHead = null;
  	this.tBody = null;
  	this.document = null;
  	this._headerOnclick = null;
  	this.sortTypes = null;
  	this._asyncsort = null;
  	this.onsort = null;
  };
  
  // Adds a sort type to all instance of SortableTable
  // sType : String - the identifier of the sort type
  // fGetValueFromString : function ( s : string ) : T - A function that takes a
  //    string and casts it to a desired format. If left out the string is just
  //    returned
  // fCompareFunction : function ( n1 : T, n2 : T ) : Number - A normal JS sort
  //    compare function. Takes two values and compares them. If left out less than,
  //    <, compare is used
  // fGetRowValue : function( oRow : HTMLTRElement, nColumn : int ) : T - A function
  //    that takes the row and the column index and returns the value used to compare.
  //    If left out then the innerText is first taken for the cell and then the
  //    fGetValueFromString is used to convert that string the desired value and type
  
  SortableTable.prototype.addSortType = function (sType, fGetValueFromString, fCompareFunction, fGetRowValue) {
  	this._sortTypeInfo[sType] = {
  		type:				sType,
  		getValueFromString:	fGetValueFromString || SortableTable.idFunction,
  		compare:			fCompareFunction || SortableTable.basicCompare,
  		getRowValue:		fGetRowValue
  	};
  };
  
  // this removes the sort type from all instances of SortableTable
  SortableTable.prototype.removeSortType = function (sType) {
  	delete this._sortTypeInfo[sType];
  };
  
  SortableTable.basicCompare = function compare(n1, n2) {
  	if (n1.value < n2.value)
  		return -1;
  	if (n2.value < n1.value)
  		return 1;
  	return 0;
  };
  
  SortableTable.idFunction = function (x) {
  	return x;
  };
  
  SortableTable.toUpperCase = function (s) {
  	return s.toUpperCase();
  };
  
  SortableTable.toDate = function (s) {
  	var parts = s.split("-");
  	var d = new Date(0);
  	d.setFullYear(parts[0]);
  	d.setDate(parts[2]);
  	d.setMonth(parts[1] - 1);
  	return d.valueOf();
  };
  
  
  // add sort types
  SortableTable.prototype.addSortType("Number", Number);
  SortableTable.prototype.addSortType("CaseInsensitiveString", SortableTable.toUpperCase);
  SortableTable.prototype.addSortType("Date", SortableTable.toDate);
  SortableTable.prototype.addSortType("String");
  // None is a special case
  
  
  
  1.1                  siminweb/js/stringbuilder.js
  
  Index: stringbuilder.js
  ===================================================================
  /*----------------------------------------------------------------------------\
  |                             String Builder 1.02                             |
  |-----------------------------------------------------------------------------|
  |                         Created by Erik Arvidsson                           |
  |                  (http://webfx.eae.net/contact.html#erik)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  | A class that allows more efficient building of strings than concatenation.  |
  |-----------------------------------------------------------------------------|
  |                  Copyright (c) 1999 - 2002 Erik Arvidsson                   |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | 2000-10-02 | First version                                                  |
  | 2000-10-05 | Added a cache of the string so that it does not need to be     |
  |            | regenerated every time in toString                             |
  | 2002-10-03 | Added minor improvement in the toString method                 |
  |-----------------------------------------------------------------------------|
  | Created 2000-10-02 | All changes are in the log above. | Updated 2002-10-03 |
  \----------------------------------------------------------------------------*/ 
  function StringBuilder(sString) {
  	
  	// public
  	this.length = 0;
  	
  	this.append = function (sString) {
  		// append argument
  		this.length += (this._parts[this._current++] = String(sString)).length;
  		
  		// reset cache
  		this._string = null;
  		return this;
  	};
  	
  	this.toString = function () {
  		if (this._string != null)
  			return this._string;
  		
  		var s = this._parts.join("");
  		this._parts = [s];
  		this._current = 1;
  		this.length = s.length;
  		
  		return this._string = s;
  	};
  
  	// private
  	this._current	= 0;
  	this._parts		= [];
  	this._string	= null;	// used to cache the string
  	
  	// init
  	if (sString != null)
  		this.append(sString);
  }
  
  
  
  1.1                  siminweb/js/xloadtree.js
  
  Index: xloadtree.js
  ===================================================================
  /*----------------------------------------------------------------------------\
  |                               XLoadTree 1.11                                |
  |-----------------------------------------------------------------------------|
  |                         Created by Erik Arvidsson                           |
  |                  (http://webfx.eae.net/contact.html#erik)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  | An extension to xTree that allows sub trees to be loaded at runtime by      |
  | reading XML files from the server. Works with IE5+ and Mozilla 1.0+         |
  |-----------------------------------------------------------------------------|
  |                   Copyright (c) 1999 - 2002 Erik Arvidsson                  |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | 2001-09-27 | Original Version Posted.                                       |
  | 2002-01-19 | Added some simple error handling and string templates for      |
  |            | reporting the errors.                                          |
  | 2002-01-28 | Fixed loading issues in IE50 and IE55 that made the tree load  |
  |            | twice.                                                         |
  | 2002-10-10 | (1.1) Added reload method that reloads the XML file from the   |
  |            | server.                                                        |
  / 2003-05-06 | Added support for target attribute                             |
  |-----------------------------------------------------------------------------|
  | Dependencies: xtree.js - original xtree library                             |
  |               xtree.css - simple css styling of xtree                       |
  |               xmlextras.js - provides xml http objects and xml document     |
  |                              objects                                        |
  |-----------------------------------------------------------------------------|
  | Created 2001-09-27 | All changes are in the log above. | Updated 2003-05-06 |
  \----------------------------------------------------------------------------*/
  
  
  webFXTreeConfig.loadingText = "Loading...";
  webFXTreeConfig.loadErrorTextTemplate = "Error loading \"%1%\"";
  webFXTreeConfig.emptyErrorTextTemplate = "Error \"%1%\" does not contain any tree items";
  
  /*
   * WebFXLoadTree class
   */
  
  function WebFXLoadTree(sText, sXmlSrc, sAction, sBehavior, sIcon, sOpenIcon) {
  	// call super
  	this.WebFXTree = WebFXTree;
  	this.WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon);
  
  	// setup default property values
  	this.src = sXmlSrc;
  	this.loading = false;
  	this.loaded = false;
  	this.errorText = "";
  
  	// check start state and load if open
  	if (this.open)
  		_startLoadXmlTree(this.src, this);
  	else {
  		// and create loading item if not
  		this._loadingItem = new WebFXTreeItem(webFXTreeConfig.loadingText);
  		this.add(this._loadingItem);
  	}
  }
  
  WebFXLoadTree.prototype = new WebFXTree;
  
  // override the expand method to load the xml file
  WebFXLoadTree.prototype._webfxtree_expand = WebFXTree.prototype.expand;
  WebFXLoadTree.prototype.expand = function() {
  	if (!this.loaded && !this.loading) {
  		// load
  		_startLoadXmlTree(this.src, this);
  	}
  	this._webfxtree_expand();
  };
  
  /*
   * WebFXLoadTreeItem class
   */
  
  function WebFXLoadTreeItem(sText, sXmlSrc, sAction, eParent, sIcon, sOpenIcon) {
  	// call super
  	this.WebFXTreeItem = WebFXTreeItem;
  	this.WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon);
  
  	// setup default property values
  	this.src = sXmlSrc;
  	this.loading = false;
  	this.loaded = false;
  	this.errorText = "";
  
  	// check start state and load if open
  	if (this.open)
  		_startLoadXmlTree(this.src, this);
  	else {
  		// and create loading item if not
  		this._loadingItem = new WebFXTreeItem(webFXTreeConfig.loadingText);
  		this.add(this._loadingItem);
  	}
  }
  
  WebFXLoadTreeItem.prototype = new WebFXTreeItem;
  
  // override the expand method to load the xml file
  WebFXLoadTreeItem.prototype._webfxtreeitem_expand = WebFXTreeItem.prototype.expand;
  WebFXLoadTreeItem.prototype.expand = function() {
  	if (!this.loaded && !this.loading) {
  		// load
  		_startLoadXmlTree(this.src, this);
  	}
  	this._webfxtreeitem_expand();
  };
  
  // reloads the src file if already loaded
  WebFXLoadTree.prototype.reload =
  WebFXLoadTreeItem.prototype.reload = function () {
  	// if loading do nothing
  	if (this.loaded) {
  		var open = this.open;
  		// remove
  		while (this.childNodes.length > 0)
  			this.childNodes[this.childNodes.length - 1].remove();
  
  		this.loaded = false;
  
  		this._loadingItem = new WebFXTreeItem(webFXTreeConfig.loadingText);
  		this.add(this._loadingItem);
  
  		if (open)
  			this.expand();
  	}
  	else if (this.open && !this.loading)
  		_startLoadXmlTree(this.src, this);
  };
  
  /*
   * Helper functions
   */
  
  // creates the xmlhttp object and starts the load of the xml document
  function _startLoadXmlTree(sSrc, jsNode) {
  	if (jsNode.loading || jsNode.loaded)
  		return;
  	jsNode.loading = true;
  	// modified by ģ at 2003-07-21
  //	sSrc = sSrc.replace('&amp;','&');
  //	alert(sSrc);
  	//--//
  	var xmlHttp = XmlHttp.create();
  	xmlHttp.open("GET", sSrc, true);	// async
  	xmlHttp.onreadystatechange = function () {
  		if (xmlHttp.readyState == 4) {
  			_xmlFileLoaded(xmlHttp.responseXML, jsNode);
  		}
  	};
  	// call in new thread to allow ui to update
  	window.setTimeout(function () {
  		xmlHttp.send(null);
  	}, 10);
  }
  
  
  // Converts an xml tree to a js tree. See article about xml tree format
  function _xmlTreeToJsTree(oNode) {
  	// retreive attributes
  	var text = oNode.getAttribute("text");
  	var action = oNode.getAttribute("action");
  	var parent = null;
  	var icon = oNode.getAttribute("icon");
  	var openIcon = oNode.getAttribute("openIcon");
  	var src = oNode.getAttribute("src");
  	var target = oNode.getAttribute("target");
  	// create jsNode
  	var jsNode;
  	if (src != null && src != "")
  		jsNode = new WebFXLoadTreeItem(text, src, action, parent, icon, openIcon);
  	else
  		jsNode = new WebFXTreeItem(text, action, parent, icon, openIcon);
  
  	if (target != "")
  		jsNode.target = target;
  
  	// go through childNOdes
  	var cs = oNode.childNodes;
  	var l = cs.length;
  	for (var i = 0; i < l; i++) {
  		if (cs[i].tagName == "tree")
  			jsNode.add( _xmlTreeToJsTree(cs[i]), true );
  	}
  
  	return jsNode;
  }
  
  // Inserts an xml document as a subtree to the provided node
  function _xmlFileLoaded(oXmlDoc, jsParentNode) {
  	if (jsParentNode.loaded)
  		return;
  
  	var bIndent = false;
  	var bAnyChildren = false;
  	jsParentNode.loaded = true;
  	jsParentNode.loading = false;
  
  	// check that the load of the xml file went well
  	if( oXmlDoc == null || oXmlDoc.documentElement == null) {
  		//alert(oXmlDoc.xml);
  		jsParentNode.errorText = parseTemplateString(webFXTreeConfig.loadErrorTextTemplate,
  							jsParentNode.src);
  		alert(jsParentNode.errorText);
  	}
  	else {
  		// there is one extra level of tree elements
  		var root = oXmlDoc.documentElement;
  
  		// loop through all tree children
  		var cs = root.childNodes;
  		var l = cs.length;
  		for (var i = 0; i < l; i++) {
  			if (cs[i].tagName == "tree") {
  				bAnyChildren = true;
  				bIndent = true;
  				jsParentNode.add( _xmlTreeToJsTree(cs[i]), true);
  			}
  		}
  
  		// if no children we got an error
  		if (!bAnyChildren)
  			jsParentNode.errorText = parseTemplateString(webFXTreeConfig.emptyErrorTextTemplate,
  										jsParentNode.src);
  	}
  
  	// remove dummy
  	if (jsParentNode._loadingItem != null) {
  		jsParentNode._loadingItem.remove();
  		bIndent = true;
  	}
  
  	if (bIndent) {
  		// indent now that all items are added
  		jsParentNode.indent();
  	}
  
  	// show error in status bar
  	if (jsParentNode.errorText != "")
  		window.status = jsParentNode.errorText;
  }
  
  // parses a string and replaces %n% with argument nr n
  function parseTemplateString(sTemplate) {
  	var args = arguments;
  	var s = sTemplate;
  
  	s = s.replace(/\%\%/g, "%");
  
  	for (var i = 1; i < args.length; i++)
  		s = s.replace( new RegExp("\%" + i + "\%", "g"), args[i] )
  
  	return s;
  }
  
  
  1.1                  siminweb/js/xmlextras.js
  
  Index: xmlextras.js
  ===================================================================
  //<script>
  //////////////////
  // Helper Stuff //
  //////////////////
  
  // used to find the Automation server name
  function getDomDocumentPrefix() {
  	if (getDomDocumentPrefix.prefix)
  		return getDomDocumentPrefix.prefix;
  	
  	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
  	var o;
  	for (var i = 0; i < prefixes.length; i++) {
  		try {
  			// try to create the objects
  			o = new ActiveXObject(prefixes[i] + ".DomDocument");
  			return getDomDocumentPrefix.prefix = prefixes[i];
  		}
  		catch (ex) {};
  	}
  	
  	throw new Error("Could not find an installed XML parser");
  }
  
  function getXmlHttpPrefix() {
  	if (getXmlHttpPrefix.prefix)
  		return getXmlHttpPrefix.prefix;
  	
  	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
  	var o;
  	for (var i = 0; i < prefixes.length; i++) {
  		try {
  			// try to create the objects
  			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
  			return getXmlHttpPrefix.prefix = prefixes[i];
  		}
  		catch (ex) {};
  	}
  	
  	throw new Error("Could not find an installed XML parser");
  }
  
  //////////////////////////
  // Start the Real stuff //
  //////////////////////////
  
  
  // XmlHttp factory
  function XmlHttp() {}
  
  XmlHttp.create = function () {
  	try {
  		if (window.XMLHttpRequest) {
  			var req = new XMLHttpRequest();
  			
  			// some versions of Moz do not support the readyState property
  			// and the onreadystate event so we patch it!
  			if (req.readyState == null) {
  				req.readyState = 1;
  				req.addEventListener("load", function () {
  					req.readyState = 4;
  					if (typeof req.onreadystatechange == "function")
  						req.onreadystatechange();
  				}, false);
  			}
  			
  			return req;
  		}
  		if (window.ActiveXObject) {
  			return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
  		}
  	}
  	catch (ex) {}
  	// fell through
  	throw new Error("Your browser does not support XmlHttp objects");
  };
  
  // XmlDocument factory
  function XmlDocument() {}
  
  XmlDocument.create = function () {
  	try {
  		// DOM2
  		if (document.implementation && document.implementation.createDocument) {
  			var doc = document.implementation.createDocument("", "", null);
  			
  			// some versions of Moz do not support the readyState property
  			// and the onreadystate event so we patch it!
  			if (doc.readyState == null) {
  				doc.readyState = 1;
  				doc.addEventListener("load", function () {
  					doc.readyState = 4;
  					if (typeof doc.onreadystatechange == "function")
  						doc.onreadystatechange();
  				}, false);
  			}
  			
  			return doc;
  		}
  		if (window.ActiveXObject)
  			return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
  	}
  	catch (ex) {}
  	throw new Error("Your browser does not support XmlDocument objects");
  };
  
  // Create the loadXML method and xml getter for Mozilla
  if (window.DOMParser &&
  	window.XMLSerializer &&
  	window.Node && Node.prototype && Node.prototype.__defineGetter__) {
  
  	// XMLDocument did not extend the Document interface in some versions
  	// of Mozilla. Extend both!
  	XMLDocument.prototype.loadXML = 
  	Document.prototype.loadXML = function (s) {
  		
  		// parse the string to a new doc	
  		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
  		
  		// remove all initial children
  		while (this.hasChildNodes())
  			this.removeChild(this.lastChild);
  			
  		// insert and import nodes
  		for (var i = 0; i < doc2.childNodes.length; i++) {
  			this.appendChild(this.importNode(doc2.childNodes[i], true));
  		}
  	};
  	
  	
  	/*
  	 * xml getter
  	 *
  	 * This serializes the DOM tree to an XML String
  	 *
  	 * Usage: var sXml = oNode.xml
  	 *
  	 */
  	// XMLDocument did not extend the Document interface in some versions
  	// of Mozilla. Extend both!
  	XMLDocument.prototype.__defineGetter__("xml", function () {
  		return (new XMLSerializer()).serializeToString(this);
  	});
  	Document.prototype.__defineGetter__("xml", function () {
  		return (new XMLSerializer()).serializeToString(this);
  	});
  }
  
  
  1.1                  siminweb/js/xtree.js
  
  Index: xtree.js
  ===================================================================
  /*----------------------------------------------------------------------------\
  |                       Cross Browser Tree Widget 1.17                        |
  |-----------------------------------------------------------------------------|
  |                          Created by Emil A Eklund                           |
  |                  (http://webfx.eae.net/contact.html#emil)                   |
  |                      For WebFX (http://webfx.eae.net/)                      |
  |-----------------------------------------------------------------------------|
  | An object based tree widget,  emulating the one found in microsoft windows, |
  | with persistence using cookies. Works in IE 5+, Mozilla and konqueror 3.    |
  |-----------------------------------------------------------------------------|
  |                   Copyright (c) 1999 - 2002 Emil A Eklund                   |
  |-----------------------------------------------------------------------------|
  | This software is provided "as is", without warranty of any kind, express or |
  | implied, including  but not limited  to the warranties of  merchantability, |
  | fitness for a particular purpose and noninfringement. In no event shall the |
  | authors or  copyright  holders be  liable for any claim,  damages or  other |
  | liability, whether  in an  action of  contract, tort  or otherwise, arising |
  | from,  out of  or in  connection with  the software or  the  use  or  other |
  | dealings in the software.                                                   |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | This  software is  available under the  three different licenses  mentioned |
  | below.  To use this software you must chose, and qualify, for one of those. |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Non-Commercial License          http://webfx.eae.net/license.html |
  | Permits  anyone the right to use the  software in a  non-commercial context |
  | free of charge.                                                             |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | The WebFX Commercial license           http://webfx.eae.net/commercial.html |
  | Permits the  license holder the right to use  the software in a  commercial |
  | context. Such license must be specifically obtained, however it's valid for |
  | any number of  implementations of the licensed software.                    |
  | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
  | GPL - The GNU General Public License    http://www.gnu.org/licenses/gpl.txt |
  | Permits anyone the right to use and modify the software without limitations |
  | as long as proper  credits are given  and the original  and modified source |
  | code are included. Requires  that the final product, software derivate from |
  | the original  source or any  software  utilizing a GPL  component, such  as |
  | this, is also licensed under the GPL license.                               |
  |-----------------------------------------------------------------------------|
  | Dependencies: xtree.css (To set up the CSS of the tree classes)             |
  |-----------------------------------------------------------------------------|
  | 2001-01-10 | Original Version Posted.                                       |
  | 2001-03-18 | Added getSelected and get/setBehavior  that can make it behave |
  |            | more like windows explorer, check usage for more information.  |
  | 2001-09-23 | Version 1.1 - New features included  keyboard  navigation (ie) |
  |            | and the ability  to add and  remove nodes dynamically and some |
  |            | other small tweaks and fixes.                                  |
  | 2002-01-27 | Version 1.11 - Bug fixes and improved mozilla support.         |
  | 2002-06-11 | Version 1.12 - Fixed a bug that prevented the indentation line |
  |            | from  updating correctly  under some  circumstances.  This bug |
  |            | happened when removing the last item in a subtree and items in |
  |            | siblings to the remove subtree where not correctly updated.    |
  | 2002-06-13 | Fixed a few minor bugs cased by the 1.12 bug-fix.              |
  | 2002-08-20 | Added usePersistence flag to allow disable of cookies.         |
  | 2002-10-23 | (1.14) Fixed a plus icon issue                                 |
  | 2002-10-29 | (1.15) Last changes broke more than they fixed. This version   |
  |            | is based on 1.13 and fixes the bugs 1.14 fixed withou breaking |
  |            | lots of other things.                                          |
  | 2003-02-15 | The  selected node can now be made visible even when  the tree |
  |            | control  loses focus.  It uses a new class  declaration in the |
  |            | css file '.webfx-tree-item a.selected-inactive', by default it |
  |            | puts a light-gray rectangle around the selected node.          |
  | 2003-03-16 | Adding target support after lots of lobbying...                |
  |-----------------------------------------------------------------------------|
  | Created 2000-12-11 | All changes are in the log above. | Updated 2003-03-16 |
  \----------------------------------------------------------------------------*/
  
  var webFXTreeConfig = {
  	rootIcon        : '/image/icon/folder.png',
  	openRootIcon    : '/image/icon/openfolder.png',
  	folderIcon      : '/image/icon/folder.png',
  	openFolderIcon  : '/image/icon/openfolder.png',
  	fileIcon        : '/image/icon/file.png',
  	iIcon           : '/image/icon/I.png',
  	lIcon           : '/image/icon/L.png',
  	lMinusIcon      : '/image/icon/Lminus.png',
  	lPlusIcon       : '/image/icon/Lplus.png',
  	tIcon           : '/image/icon/T.png',
  	tMinusIcon      : '/image/icon/Tminus.png',
  	tPlusIcon       : '/image/icon/Tplus.png',
  	blankIcon       : '/image/icon/blank.png',
  	defaultText     : 'Tree Item',
  	defaultAction   : 'javascript:void(0);',
  	defaultBehavior : 'classic',
  	usePersistence	: true
  };
  
  var webFXTreeHandler = {
  	idCounter : 0,
  	idPrefix  : "webfx-tree-object-",
  	all       : {},
  	behavior  : null,
  	selected  : null,
  	onSelect  : null, /* should be part of tree, not handler */
  	getId     : function() { return this.idPrefix + this.idCounter++; },
  	toggle    : function (oItem) { this.all[oItem.id.replace('-plus','')].toggle(); },
  	select    : function (oItem) { this.all[oItem.id.replace('-icon','')].select(); },
  	focus     : function (oItem) { this.all[oItem.id.replace('-anchor','')].focus(); },
  	blur      : function (oItem) { this.all[oItem.id.replace('-anchor','')].blur(); },
  	keydown   : function (oItem, e) { return this.all[oItem.id].keydown(e.keyCode); },
  	cookies   : new WebFXCookie(),
  	insertHTMLBeforeEnd	:	function (oElement, sHTML) {
  		if (oElement.insertAdjacentHTML != null) {
  			oElement.insertAdjacentHTML("BeforeEnd", sHTML)
  			return;
  		}
  		var df;	// DocumentFragment
  		var r = oElement.ownerDocument.createRange();
  		r.selectNodeContents(oElement);
  		r.collapse(false);
  		df = r.createContextualFragment(sHTML);
  		oElement.appendChild(df);
  	}
  };
  
  /*
   * WebFXCookie class
   */
  
  function WebFXCookie() {
  	if (document.cookie.length) { this.cookies = ' ' + document.cookie; }
  }
  
  WebFXCookie.prototype.setCookie = function (key, value) {
  	document.cookie = key + "=" + escape(value);
  }
  
  WebFXCookie.prototype.getCookie = function (key) {
  	if (this.cookies) {
  		var start = this.cookies.indexOf(' ' + key + '=');
  		if (start == -1) { return null; }
  		var end = this.cookies.indexOf(";", start);
  		if (end == -1) { end = this.cookies.length; }
  		end -= start;
  		var cookie = this.cookies.substr(start,end);
  		return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1));
  	}
  	else { return null; }
  }
  
  /*
   * WebFXTreeAbstractNode class
   */
  
  function WebFXTreeAbstractNode(sText, sAction) {
  	this.childNodes  = [];
  	this.id     = webFXTreeHandler.getId();
  	this.text   = sText || webFXTreeConfig.defaultText;
  	this.action = sAction || webFXTreeConfig.defaultAction;
  	this._last  = false;
  	webFXTreeHandler.all[this.id] = this;
  }
  
  /*
   * To speed thing up if you're adding multiple nodes at once (after load)
   * use the bNoIdent parameter to prevent automatic re-indentation and call
   * the obj.ident() method manually once all nodes has been added.
   */
  
  WebFXTreeAbstractNode.prototype.add = function (node, bNoIdent) {
  	node.parentNode = this;
  	this.childNodes[this.childNodes.length] = node;
  	var root = this;
  	if (this.childNodes.length >= 2) {
  		this.childNodes[this.childNodes.length - 2]._last = false;
  	}
  	while (root.parentNode) { root = root.parentNode; }
  	if (root.rendered) {
  		if (this.childNodes.length >= 2) {
  			document.getElementById(this.childNodes[this.childNodes.length - 2].id + '-plus').src = ((this.childNodes[this.childNodes.length -2].folder)?((this.childNodes[this.childNodes.length -2].open)?webFXTreeConfig.tMinusIcon:webFXTreeConfig.tPlusIcon):webFXTreeConfig.tIcon);
  			this.childNodes[this.childNodes.length - 2].plusIcon = webFXTreeConfig.tPlusIcon;
  			this.childNodes[this.childNodes.length - 2].minusIcon = webFXTreeConfig.tMinusIcon;
  			this.childNodes[this.childNodes.length - 2]._last = false;
  		}
  		this._last = true;
  		var foo = this;
  		while (foo.parentNode) {
  			for (var i = 0; i < foo.parentNode.childNodes.length; i++) {
  				if (foo.id == foo.parentNode.childNodes[i].id) { break; }
  			}
  			if (i == foo.parentNode.childNodes.length - 1) { foo.parentNode._last = true; }
  			else { foo.parentNode._last = false; }
  			foo = foo.parentNode;
  		}
  		webFXTreeHandler.insertHTMLBeforeEnd(document.getElementById(this.id + '-cont'), node.toString());
  		if ((!this.folder) && (!this.openIcon)) {
  			this.icon = webFXTreeConfig.folderIcon;
  			this.openIcon = webFXTreeConfig.openFolderIcon;
  		}
  		if (!this.folder) { this.folder = true; this.collapse(true); }
  		if (!bNoIdent) { this.indent(); }
  	}
  	return node;
  }
  
  WebFXTreeAbstractNode.prototype.toggle = function() {
  	if (this.folder) {
  		if (this.open) { this.collapse(); }
  		else { this.expand(); }
  }	}
  
  WebFXTreeAbstractNode.prototype.select = function() {
  	document.getElementById(this.id + '-anchor').focus();
  }
  
  WebFXTreeAbstractNode.prototype.deSelect = function() {
  	document.getElementById(this.id + '-anchor').className = '';
  	webFXTreeHandler.selected = null;
  }
  
  WebFXTreeAbstractNode.prototype.focus = function() {
  	if ((webFXTreeHandler.selected) && (webFXTreeHandler.selected != this)) { webFXTreeHandler.selected.deSelect(); }
  	webFXTreeHandler.selected = this;
  	if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.openIcon; }
  	document.getElementById(this.id + '-anchor').className = 'selected';
  	document.getElementById(this.id + '-anchor').focus();
  	if (webFXTreeHandler.onSelect) { webFXTreeHandler.onSelect(this); }
  }
  
  WebFXTreeAbstractNode.prototype.blur = function() {
  	if ((this.openIcon) && (webFXTreeHandler.behavior != 'classic')) { document.getElementById(this.id + '-icon').src = this.icon; }
  	document.getElementById(this.id + '-anchor').className = 'selected-inactive';
  }
  
  WebFXTreeAbstractNode.prototype.doExpand = function() {
  	if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.openIcon; }
  	if (this.childNodes.length) {  document.getElementById(this.id + '-cont').style.display = 'block'; }
  	this.open = true;
  	if (webFXTreeConfig.usePersistence) {
  		webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '1');
  }	}
  
  WebFXTreeAbstractNode.prototype.doCollapse = function() {
  	if (webFXTreeHandler.behavior == 'classic') { document.getElementById(this.id + '-icon').src = this.icon; }
  	if (this.childNodes.length) { document.getElementById(this.id + '-cont').style.display = 'none'; }
  	this.open = false;
  	if (webFXTreeConfig.usePersistence) {
  		webFXTreeHandler.cookies.setCookie(this.id.substr(18,this.id.length - 18), '0');
  }	}
  
  WebFXTreeAbstractNode.prototype.expandAll = function() {
  	this.expandChildren();
  	if ((this.folder) && (!this.open)) { this.expand(); }
  }
  
  WebFXTreeAbstractNode.prototype.expandChildren = function() {
  	for (var i = 0; i < this.childNodes.length; i++) {
  		this.childNodes[i].expandAll();
  } }
  
  WebFXTreeAbstractNode.prototype.collapseAll = function() {
  	this.collapseChildren();
  	if ((this.folder) && (this.open)) { this.collapse(true); }
  }
  
  WebFXTreeAbstractNode.prototype.collapseChildren = function() {
  	for (var i = 0; i < this.childNodes.length; i++) {
  		this.childNodes[i].collapseAll();
  } }
  
  WebFXTreeAbstractNode.prototype.indent = function(lvl, del, last, level, nodesLeft) {
  	/*
  	 * Since we only want to modify items one level below ourself,
  	 * and since the rightmost indentation position is occupied by
  	 * the plus icon we set this to -2
  	 */
  	if (lvl == null) { lvl = -2; }
  	var state = 0;
  	for (var i = this.childNodes.length - 1; i >= 0 ; i--) {
  		state = this.childNodes[i].indent(lvl + 1, del, last, level);
  		if (state) { return; }
  	}
  	if (del) {
  		if ((level >= this._level) && (document.getElementById(this.id + '-plus'))) {
  			if (this.folder) {
  				document.getElementById(this.id + '-plus').src = (this.open)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.lPlusIcon;
  				this.plusIcon = webFXTreeConfig.lPlusIcon;
  				this.minusIcon = webFXTreeConfig.lMinusIcon;
  			}
  			else if (nodesLeft) { document.getElementById(this.id + '-plus').src = webFXTreeConfig.lIcon; }
  			return 1;
  	}	}
  	var foo = document.getElementById(this.id + '-indent-' + lvl);
  	if (foo) {
  		if ((foo._last) || ((del) && (last))) { foo.src =  webFXTreeConfig.blankIcon; }
  		else { foo.src =  webFXTreeConfig.iIcon; }
  	}
  	return 0;
  }
  
  /*
   * WebFXTree class
   */
  
  function WebFXTree(sText, sAction, sBehavior, sIcon, sOpenIcon) {
  	this.base = WebFXTreeAbstractNode;
  	this.base(sText, sAction);
  	this.icon      = sIcon || webFXTreeConfig.rootIcon;
  	this.openIcon  = sOpenIcon || webFXTreeConfig.openRootIcon;
  	/* Defaults to open */
  	if (webFXTreeConfig.usePersistence) {
  		this.open  = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '0')?false:true;
  	} else { this.open  = true; }
  	this.folder    = true;
  	this.rendered  = false;
  	this.onSelect  = null;
  	if (!webFXTreeHandler.behavior) {  webFXTreeHandler.behavior = sBehavior || webFXTreeConfig.defaultBehavior; }
  }
  
  WebFXTree.prototype = new WebFXTreeAbstractNode;
  
  WebFXTree.prototype.setBehavior = function (sBehavior) {
  	webFXTreeHandler.behavior =  sBehavior;
  };
  
  WebFXTree.prototype.getBehavior = function (sBehavior) {
  	return webFXTreeHandler.behavior;
  };
  
  WebFXTree.prototype.getSelected = function() {
  	if (webFXTreeHandler.selected) { return webFXTreeHandler.selected; }
  	else { return null; }
  }
  
  WebFXTree.prototype.remove = function() { }
  
  WebFXTree.prototype.expand = function() {
  	this.doExpand();
  }
  
  WebFXTree.prototype.collapse = function(b) {
  	if (!b) { this.focus(); }
  	this.doCollapse();
  }
  
  WebFXTree.prototype.getFirst = function() {
  	return null;
  }
  
  WebFXTree.prototype.getLast = function() {
  	return null;
  }
  
  WebFXTree.prototype.getNextSibling = function() {
  	return null;
  }
  
  WebFXTree.prototype.getPreviousSibling = function() {
  	return null;
  }
  
  WebFXTree.prototype.keydown = function(key) {
  	if (key == 39) {
  		if (!this.open) { this.expand(); }
  		else if (this.childNodes.length) { this.childNodes[0].select(); }
  		return false;
  	}
  	if (key == 37) { this.collapse(); return false; }
  	if ((key == 40) && (this.open) && (this.childNodes.length)) { this.childNodes[0].select(); return false; }
  	return true;
  }
  
  WebFXTree.prototype.toString = function() {
  	var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
  		"<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" +
  		"<a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
  		(this.target ? " target=\"" + this.target + "\"" : "") +
  		">" + this.text + "</a></div>" +
  		"<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
  	var sb = [];
  	for (var i = 0; i < this.childNodes.length; i++) {
  		sb[i] = this.childNodes[i].toString(i, this.childNodes.length);
  	}
  	this.rendered = true;
  	return str + sb.join("") + "</div>";
  };
  
  /*
   * WebFXTreeItem class
   */
  
  function WebFXTreeItem(sText, sAction, eParent, sIcon, sOpenIcon) {
  	this.base = WebFXTreeAbstractNode;
  	this.base(sText, sAction);
  	/* Defaults to close */
  	if (webFXTreeConfig.usePersistence) {
  		this.open = (webFXTreeHandler.cookies.getCookie(this.id.substr(18,this.id.length - 18)) == '1')?true:false;
  	} else { this.open = false; }
  	if (sIcon) { this.icon = sIcon; }
  	if (sOpenIcon) { this.openIcon = sOpenIcon; }
  	if (eParent) { eParent.add(this); }
  }
  
  WebFXTreeItem.prototype = new WebFXTreeAbstractNode;
  
  WebFXTreeItem.prototype.remove = function() {
  	var iconSrc = document.getElementById(this.id + '-plus').src;
  	var parentNode = this.parentNode;
  	var prevSibling = this.getPreviousSibling(true);
  	var nextSibling = this.getNextSibling(true);
  	var folder = this.parentNode.folder;
  	var last = ((nextSibling) && (nextSibling.parentNode) && (nextSibling.parentNode.id == parentNode.id))?false:true;
  	this.getPreviousSibling().focus();
  	this._remove();
  	if (parentNode.childNodes.length == 0) {
  		document.getElementById(parentNode.id + '-cont').style.display = 'none';
  		parentNode.doCollapse();
  		parentNode.folder = false;
  		parentNode.open = false;
  	}
  	if (!nextSibling || last) { parentNode.indent(null, true, last, this._level, parentNode.childNodes.length); }
  	if ((prevSibling == parentNode) && !(parentNode.childNodes.length)) {
  		prevSibling.folder = false;
  		prevSibling.open = false;
  		iconSrc = document.getElementById(prevSibling.id + '-plus').src;
  		iconSrc = iconSrc.replace('minus', '').replace('plus', '');
  		document.getElementById(prevSibling.id + '-plus').src = iconSrc;
  		document.getElementById(prevSibling.id + '-icon').src = webFXTreeConfig.fileIcon;
  	}
  	if (document.getElementById(prevSibling.id + '-plus')) {
  		if (parentNode == prevSibling.parentNode) {
  			iconSrc = iconSrc.replace('minus', '').replace('plus', '');
  			document.getElementById(prevSibling.id + '-plus').src = iconSrc;
  }	}	}
  
  WebFXTreeItem.prototype._remove = function() {
  	for (var i = this.childNodes.length - 1; i >= 0; i--) {
  		this.childNodes[i]._remove();
   	}
  	for (var i = 0; i < this.parentNode.childNodes.length; i++) {
  		if (this == this.parentNode.childNodes[i]) {
  			for (var j = i; j < this.parentNode.childNodes.length; j++) {
  				this.parentNode.childNodes[j] = this.parentNode.childNodes[j+1];
  			}
  			this.parentNode.childNodes.length -= 1;
  			if (i + 1 == this.parentNode.childNodes.length) { this.parentNode._last = true; }
  			break;
  	}	}
  	webFXTreeHandler.all[this.id] = null;
  	var tmp = document.getElementById(this.id);
  	if (tmp) { tmp.parentNode.removeChild(tmp); }
  	tmp = document.getElementById(this.id + '-cont');
  	if (tmp) { tmp.parentNode.removeChild(tmp); }
  }
  
  WebFXTreeItem.prototype.expand = function() {
  	this.doExpand();
  	document.getElementById(this.id + '-plus').src = this.minusIcon;
  }
  
  WebFXTreeItem.prototype.collapse = function(b) {
  	if (!b) { this.focus(); }
  	this.doCollapse();
  	document.getElementById(this.id + '-plus').src = this.plusIcon;
  }
  
  WebFXTreeItem.prototype.getFirst = function() {
  	return this.childNodes[0];
  }
  
  WebFXTreeItem.prototype.getLast = function() {
  	if (this.childNodes[this.childNodes.length - 1].open) { return this.childNodes[this.childNodes.length - 1].getLast(); }
  	else { return this.childNodes[this.childNodes.length - 1]; }
  }
  
  WebFXTreeItem.prototype.getNextSibling = function() {
  	for (var i = 0; i < this.parentNode.childNodes.length; i++) {
  		if (this == this.parentNode.childNodes[i]) { break; }
  	}
  	if (++i == this.parentNode.childNodes.length) { return this.parentNode.getNextSibling(); }
  	else { return this.parentNode.childNodes[i]; }
  }
  
  WebFXTreeItem.prototype.getPreviousSibling = function(b) {
  	for (var i = 0; i < this.parentNode.childNodes.length; i++) {
  		if (this == this.parentNode.childNodes[i]) { break; }
  	}
  	if (i == 0) { return this.parentNode; }
  	else {
  		if ((this.parentNode.childNodes[--i].open) || (b && this.parentNode.childNodes[i].folder)) { return this.parentNode.childNodes[i].getLast(); }
  		else { return this.parentNode.childNodes[i]; }
  } }
  
  WebFXTreeItem.prototype.keydown = function(key) {
  	if ((key == 39) && (this.folder)) {
  		if (!this.open) { this.expand(); }
  		else { this.getFirst().select(); }
  		return false;
  	}
  	else if (key == 37) {
  		if (this.open) { this.collapse(); }
  		else { this.parentNode.select(); }
  		return false;
  	}
  	else if (key == 40) {
  		if (this.open) { this.getFirst().select(); }
  		else {
  			var sib = this.getNextSibling();
  			if (sib) { sib.select(); }
  		}
  		return false;
  	}
  	else if (key == 38) { this.getPreviousSibling().select(); return false; }
  	return true;
  }
  
  WebFXTreeItem.prototype.toString = function (nItem, nItemCount) {
  	var foo = this.parentNode;
  	var indent = '';
  	if (nItem + 1 == nItemCount) { this.parentNode._last = true; }
  	var i = 0;
  	while (foo.parentNode) {
  		foo = foo.parentNode;
  		indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent;
  		i++;
  	}
  	this._level = i;
  	if (this.childNodes.length) { this.folder = 1; }
  	else { this.open = false; }
  	if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) {
  		if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; }
  		if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; }
  	}
  	else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; }
  	var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  	var str = "<div id=\"" + this.id + "\" ondblclick=\"webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">" +
  		indent +
  		"<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">" +
  		"<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\">" +
  		"<a href=\"" + this.action + "\" id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\"" +
  		(this.target ? " target=\"" + this.target + "\"" : "") +
  		">" + label + "</a></div>" +
  		"<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
  	var sb = [];
  	for (var i = 0; i < this.childNodes.length; i++) {
  		sb[i] = this.childNodes[i].toString(i,this.childNodes.length);
  	}
  	this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon);
  	this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon);
  	return str + sb.join("") + "</div>";
  }
  
  


comfuture    04/11/24 21:25:18

  Added:       lib/DB   menu.php mysql.php oracle.php sqlite.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/lib/DB/menu.php
  
  Index: menu.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/menu.php
  * 작성일: 2004-10-29
  * 작성자: 거친마루
  * 설  명: 관리자 메뉴
  *****************************************************************
  * 
  */
  
  $tpl->define('CONTENT', WebApp::getTemplate('admin/menu.htm'));
  
  ?>
  
  
  1.1                  siminweb/lib/DB/mysql.php
  
  Index: mysql.php
  ===================================================================
  <?php
  /**********************************************
  * ϸ: DB/mysql.php
  *   : MySQL DB Ŭ, WebApp 
  *   ¥: 2003-04-18
  * ۼ: ģ (comfuture@maniacamp.com) 
  * 2003-09-16 config  ÿ  ó, dsn 
  * 2004-01-14 dsn   DB Ŭ 
  ***********************************************/
  
  require_once dirname(__FILE__)."/../class.DB.php";
  
  class DB_Mysql extends DB {
  
  	var $dbname;
  	var $result;
  	var $config = array(
  		'array_key_case'	=>	CASE_LOWER,
  		'fetch_mode'		=>	MYSQL_BOTH
  	);
  
  	function DB_Mysql($host='localhost',$user='',$pass='',$db='') {
  		if ($host && $user && $pass && $db) {
  			$this->connect($host,$user,$pass);
  			$this->_selectDB($db);
  		}
  	}
  
  	function connect($host,$user,$pass) {
  		if(!$this->conn = mysql_connect($host,$user,$pass)) {
  			$this->error = "DB Connection Error";
  			return false;
  		} else {
  			return true;
  		}
  	}
  
  	function _selectDB($dbname='') {
  		if ($dbname) $this->dbname = $dbname;
  		if(!@mysql_select_db($this->dbname, $this->conn))
  			return $this->sqlError();
  		else 
  			return true;
  	}
  
  	function query($sql) {
  		if ($this->result = @mysql_query($sql,$this->conn)) {
  			return true;
  		} else {
  			$this->error = @mysql_error();
  			return false;
  		}
  	}
  
  	function fetch($mode=MYSQL_BOTH) {
  		$row = @mysql_fetch_array($this->result,$mode);
  		return @array_change_key_case($row,$this->config['array_key_case']);
  	}
  
  
  	function close() {
  		if(@mysql_close($this->conn)) {
  			return;
  		}	else {
  			return $this->sqlError();
  		}
  	}
  
  	function sqlError() {
  		$this->error = mysql_error();
  		return false;
  	}
  }
  
  ?>
  
  
  
  1.1                  siminweb/lib/DB/oracle.php
  
  Index: oracle.php
  ===================================================================
  <?
  /**
  * ϸ: DB/oracle.php
  *   : Ŭ DB
  * ۼ: ģ
  *   ¥: 2004-01-13
  *
  ***********************************************
  */
  
  require_once dirname(__FILE__)."/../class.DB.php";
  
  class DB_Oracle extends DB {
  
  	var $conn;
  	var $stmt;
  	var $error;
  	var $config = array(
  		'array_key_case'	=>	CASE_LOWER,	// BearTemplate  빮    ĪϹǷ ҹڷ ޾Ƴ° ȥ!
  		'fetch_mode'		=>	OCI_ASSOC	// TODO: fetch_mode   ȵ
  	);
  
  	function DB_Oracle($host='',$user='',$pass='',$sid='') {
  		// XXX : ȣƮ 
  		if ($user && $pass && $sid) $this->connect($user,$pass,$sid);
  	}
  
  	function connect($user,$pass,$sid) {
  		if (!$this->conn) $this->conn = @OciLogon($user,$pass,$sid);
  	}
  	
  	function parse($sql) {
  		$this->stmt = @OciParse($this->conn,$sql);
  	}
  
  	function exec($mode=OCI_DEFAULT) {
  		@OciExecute($this->stmt,$mode);
  		if ($this->error = @OciError($this->stmt)) return false;
  		return true;
  	}
  
  	//==-- OCI specific --==//
  	function commit() {
  		if (!$this->error) return @OciCommit($this->conn);
  	}
  
  	function rollback() {
  		return $this->OciRollback($this->conn);
  	}
  
  	function defineByName($val,&$word) {
  		@OciDefineByName($this->stmt,$val,&$word);
  	}
  
  	function fetchinto(&$row,$mode=OCI_ASSOC) {
  		$ret = @OciFetchInto($this->stmt,&$row,$mode);
  		$row = @array_change_key_case($row,$this->config['array_key_case']);
  		return $ret;
  	}
  
  	function fetchstatement(&$results) {
  		return @OciFetchStatement($this->stmt,&$resutls);
  	}
  	
  	function bindByName($place_holder,&$var,$length) {
  		return @OciBindByName($this->stmt,$place_holder,&$var,$length);
  	}
  	
  	// ... ....5 7 ö ߰...--;
  	//function bindByName1($place_holder,&$var,$length) { 
  		//return @OCIBindByName($this->stmt1,$place_holder,$var,$length);
  	//}
  
  	function FreeStatement() {
  		return @OciFreeStatement($this->stmt);
  	}
  	//==-- --==//
  
  	function disconnect() {
  		if($this->error) {
  			@OciRollback($this->conn);
  			die("<font color=red>rollback occurrred!!".$this->error["message"]."</font>");
  		} else {
  			@Ocicommit($this->conn);
  		}
  		@Ocilogoff($this->conn);
  	}
  
  	function query($sql,$mode=OCI_DEFAULT) {
  		$this->stmt = @OciParse($this->conn,$sql);
  		return @$this->exec($mode);
  	}
  	// XXX: Warning! OciFetch ٸ.. DB Ŭ ϰ ϱ Ѱ Row  return ϴ  Ѵ.
  	function fetch($mode=OCI_ASSOC) {
  		@OciFetchinto($this->stmt,&$row,$mode);
  		return @array_change_key_case($row,$this->config['array_key_case']);
  	}
  }
  
  ?>
  
  
  
  1.1                  siminweb/lib/DB/sqlite.php
  
  Index: sqlite.php
  ===================================================================
  <?php
  /**********************************************
  * ϸ: DB/sqlite.php
  *   : Sqlite DB Ŭ, WebApp 
  *   ¥: 2004-06-22
  * ۼ: ģ (comfuture@maniacamp.com) 
  ***********************************************/
  
  require_once dirname(__FILE__)."/../class.DB.php";
  
  class DB_Sqlite extends DB {
  
  	var $dbname;
  	var $result;
  	var $config = array(
  		'array_key_case'	=>	CASE_LOWER,
  		'fetch_mode'		=>	MYSQL_BOTH
  	);
  
  	function DB_Sqlite($host='localhost',$user='',$pass='',$db='') {
  		// user, pass 
  		if ($host && $db) {
  			if (phpversion() > 5) dl('lib/sqlite.so');
  			$this->connect($host, $db);
  		}
  	}
  
  	function connect($host, $db) {
  		if(!$this->conn = sqlite_open("$host/$db")) {
  			$this->error = "DB Connection Error";
  			return false;
  		} else {
  			return true;
  		}
  	}
  
  	function query($sql) {
  		if ($this->result = @sqlite_query($sql,$this->conn)) {
  			return true;
  		} else {
  			$this->error = @sqlite_error();
  			return false;
  		}
  	}
  
  	function fetch($mode=MYSQL_BOTH) {
  		$row = @sqlite_fetch_array($this->result,$mode);
  		return @array_change_key_case($row,$this->config['array_key_case']);
  	}
  
  	function close() {
  		if(@sqlite_close($this->conn)) {
  			return;
  		}	else {
  			return $this->sqlError();
  		}
  	}
  
  	function sqlError() {
  		$this->error = mysql_error();
  		return false;
  	}
  }
  
  ?>
  
  
  


comfuture    04/11/24 21:25:19

  Added:       lib/Template_ function.returnHello.php
                        functions.safe_mode.ini object.CustomTag.php
                        object.say.php postfilter.arrangeSpace.php
                        postfilter.removeTmpCode.php
                        prefilter.adjustPath.php prefilter.customtag.php
                        prefilter.parseMySyntax.php prefilter.ssi.php
                        prefilter.webapp.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/lib/Template_/function.returnHello.php
  
  Index: function.returnHello.php
  ===================================================================
  <?php
  
  /* TEMPLATE PLUGIN FUNCTION EXAMPLE */
  
  function returnHello($user='world')
  {
  	return 'hello '.$user;
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/functions.safe_mode.ini
  
  Index: functions.safe_mode.ini
  ===================================================================
  
  ; This file is used when $safe_mode property is true. ($safe_mode is not related with php's safe_mode.)
  ; On Template_'s safe mode, only functions listed here and plugin functions operate in template.
  ; Functions can be separated by whitespaces (space, tab, newline).
  ; Line comments by ';' are available.
  
  
  
  ; string
  
  addcslashes
  addslashes
  bin2hex
  chop
  chr
  chunk_split
  convert_cyr_string
  count_chars
  crc32
  crypt
  hebrev
  hebrevc
  html_entity_decode
  htmlentities
  htmlspecialchars
  implode
  join
  levenshtein
  ltrim
  md5
  metaphone
  money_format
  nl_langinfo
  nl2br
  number_format
  ord
  quoted_printable_decode
  quotemeta
  rtrim
  setlocale
  sha1
  similar_text
  soundex
  sprintf
  sscanf
  str_ireplace
  str_pad
  str_repeat
  str_replace
  str_rot13
  str_shuffle
  str_split
  str_word_count
  strcasecmp
  strchr
  strcmp
  strcoll
  strcspn
  strip_tags
  stripcslashes
  stripos
  stripslashes
  stristr
  strlen
  strnatcasecmp
  strnatcmp
  strncasecmp
  strncmp
  strpos
  strrchr
  strrev
  strripos
  strrpos
  strspn
  strstr
  strtok
  strtolower
  strtoupper
  strtr
  substr_count
  substr_replace
  substr
  trim
  ucfirst
  ucwords
  vsprintf
  wordwrap
  
  ; date & time
  
  checkdate
  date
  gmdate
  gmmktime
  gmstrftime
  microtime
  mktime
  strftime
  strtotime
  time
  
  ; regexp
  
  preg_match
  preg_quote
  preg_replace_callback
  preg_replace
  ereg_replace
  ereg
  eregi_replace
  eregi
  sql_regcase
  
  ; array
  
  array_change_key_case
  array_chunk
  array_combine
  array_count_values
  array_diff_assoc
  array_diff
  array_fill
  array_filter
  array_flip
  array_intersect_assoc
  array_intersect
  array_key_exists
  array_keys
  array_map
  array_merge_recursive
  array_merge
  array_multisort
  array_pad
  array_pop
  array_push
  array_rand
  array_reduce
  array_reverse
  array_search
  array_shift
  array_slice
  array_splice
  array_sum
  array_unique
  array_unshift
  array_values
  array_walk
  array
  arsort
  asort
  compact
  count
  current
  each
  end
  extract
  in_array
  key
  krsort
  ksort
  list
  natcasesort
  natsort
  next
  pos
  prev
  range
  reset
  rsort
  shuffle
  sizeof
  sort
  uasort
  uksort
  usort
  
  
  1.1                  siminweb/lib/Template_/object.CustomTag.php
  
  Index: object.CustomTag.php
  ===================================================================
  <?
  class CustomTag {
  	var $namespace = 'wa:';
  	var $wrapper = '__Wrapper__';
  
  	function _transformArgs($args) {
  		$keys = array_keys($args);
  		$values = array_values($args);
  		return array_merge($keys, $values);
  	}
  
  	function _combineArray($keys, $vals) {
  		$i = 0;
  		$ret = array();
  		foreach ($keys as $key) {
  			$ret[$key] = $vals[$i++];
  		}
  		return $ret;
  	}
  
  	function _parseAttr($str) {
  		while (eregi('([0-9a-zA-Z_]*)[ =]*[^\"]\"([^\"]*)\"', $str, $reg)) { 
  			$key = $reg[1];
  			
  			$val = $reg[2];
  			$ret[$key] = $val;
  			$q = "($key)[ =]*[^\"]\"$val\"";
  			
  			$str = eregi_replace($q, "", $str);
  		}
  		$ret['dummy'] = "dummy";
  		return $ret;
  	}
  
  	function _parseTag($src, $cxt){
  		$pre = $src;
  		$ns = $this->namespace;
  		if (eregi("<{$ns}([^ >]*)([^>]*)>(.*)", $src, $reg)) {
  			$tag = $reg[1];
  			$cxt['attributes'] = $this->_parseAttr($reg[2]);
  			$osp = strpos($pre, "<{$ns}{$tag}{$reg[2]}>");
  			$isp = strpos($pre, ">", $osp) + 1;
  			$iep = strpos($pre, "</{$ns}{$tag}>", $isp);
  			if ($iep != FALSE) {
  				$iep = $iep - 1;
  				$oep = strpos($pre, ">", $iep);
  				$inner = substr($pre, $isp, $iep - $isp + 1);
  				$outer = substr($pre, $osp, $oep - $osp + 1);
  				$post = substr($pre, 0, $osp);
  				$pre = substr($pre, $oep + 1);
  				$cxt['inner'] = $inner;
  			} else {
  				$oep = $isp - 1;
  				$iep = $oep;
  				$inner = substr($pre, $isp, $iep - $isp + 1);
  				$outer = substr($pre, $osp, $oep - $osp + 1);
  				$post = substr($pre, 0, $osp);
  				$pre = substr($pre, $oep + 1);
  			}
  			
  			$arg = _transformArgs($cxt);
  			
  			//  κ Ŀ ±׷ Ȱ
  			if (function_exists("{$ns}{$tag}")) {
  				return $post . call_user_func_array("{$ns}{$tag}", $arg) . $this->_parseTag($pre, $cxt);
  			} else {
  				return $post . $this->_parseTag($inner, $cxt) . $this->_parseTag($pre, $cxt);
  			}
  		}
  		return $pre;
  	}
  
  
  	function retriveArgs($args) {
  		$count = count($args);
  		$values = array_slice($args, $count / 2);
  		$keys = array_slice($args, 0, $count / 2);
  		return $this->_combineArray($keys, $values);
  	}
  
  	/*
  	function do_global_attributes($contents, $args) {
  		
  		
  		if ($args != "") {
  			foreach ($args as $key => $value) {
  				if (function_exists("ER_GA_$key")) {
  					$contents = call_user_func("ER_GA_$key", $value, $contents);
  				} else {
  				
  				}
  			}
  		}
  		
  		return $contents;	
  	}
  	*/
  
  	function getAttributes($args) {
  		return $args['attributes'];	
  	}
  }
  
  class __Wrapper__ {
  	function __call($cmd,$args) {
  		return "$cmd Called!";
  	}
  }
  ?>
  
  
  
  1.1                  siminweb/lib/Template_/object.say.php
  
  Index: object.say.php
  ===================================================================
  <?php
  
  /* TEMPLATE PLUGIN OBJECT EXAMPLE */
  
  class tpl_object_say
  {
  
  	function tpl_object_say($user='guest')
  	{
  		$this->user= $user;
  	}
  	function hello()
  	{
  		return 'Hello! '.$this->user;
  	}
  	function goodbye()
  	{
  		return 'Good Bye! '.$this->user;
  	}
  }
  
  
  1.1                  siminweb/lib/Template_/postfilter.arrangeSpace.php
  
  Index: postfilter.arrangeSpace.php
  ===================================================================
  <?php
  
  /* POSTFILTER EXAMPLE */
  
  function arrangeSpace($source, $tpl)
  {
  	$split=preg_split('@(<pre.*?</pre)@is', $source, -1, PREG_SPLIT_DELIM_CAPTURE);
  	for ($i=0,$s=count($split); $i<$s; $i+=2) $split[$i] = preg_replace('/[ \t]*(\r\n|\n|\r)\s*/', '$1', $split[$i]);
  	return trim(implode('', $split));
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/postfilter.removeTmpCode.php
  
  Index: postfilter.removeTmpCode.php
  ===================================================================
  <?php
  
  /* POSTFILTER EXAMPLE */
  
  function removeTmpCode($source, $tpl)
  {
  	return preg_replace('@<!BeginTmp>.*?<!EndTmp>[ \t]*(\r\n|\n|\r)?\s*@s', '', $source);
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/prefilter.adjustPath.php
  
  Index: prefilter.adjustPath.php
  ===================================================================
  <?php
  
  /* TEMPLATE_ PREFILTER : ADJUSTPATH (2004-05-06) */
  
  function adjustPath($source, &$tpl, $indicator='', $type='absolute')
  {
  
  	$default_indicator = 'css,js,gif,jpg,jpeg,png,swf';
  	$path_filter = array();
  
  //
  	//$document_root = $_SERVER['DOCUMENT_ROOT']; 
  
  	if (!$indicator || $indicator==='default') $indicator=$default_indicator;
  	if (!$indicator=str_replace(',', '|', preg_replace('/^,\s*|\s*,$/', '', $indicator))) return $source;
  
  	$web_path=$_SERVER['PHP_SELF'];
  	$tpl_path=$tpl->tpl_path;
  	$on_ms   =$tpl->on_ms;
  	if (!empty($_SERVER['PATH_TRANSLATED'])) {
  		$php_path=$_SERVER['PATH_TRANSLATED'];
  	} elseif (!empty($_SERVER['SCRIPT_FILENAME'])) {
  		$php_path=$_SERVER['SCRIPT_FILENAME'];
  	} else {
  		$tpl->report('Error #33', 'prefilter "adjustPath" cannot find absolute path of <b>'.$_SERVER['PHP_SELF'].' on OS</b>', true);
  		exit;
  	}
  	if ($on_ms) {
  		$web_path=preg_replace('@\\\\+@', '/', $web_path);
  		$php_path=preg_replace('@\\\\+@', '/', $php_path);
  		$tpl_path=preg_replace('@\\\\+@', '/', $tpl_path);
  	}
  	$web_dirs=explode('/', $web_path);
  	$php_dirs=explode('/', $php_path);
  	$tpl_dirs=explode('/', $tpl_path);
  	array_pop($web_dirs);
  	array_pop($php_dirs);
  	array_pop($tpl_dirs);
  	$web_depth=count($web_dirs);
  	$php_depth=count($php_dirs);
  	$tpl_depth=count($tpl_dirs);
  	$m=array();
  
  //
  	$Dot='(?<=url\()\\\\*\./(?:(?:[^)/]+/)*[^)/]+)?'.
  		'|(?<=")\\\\*\./(?:(?:[^"/]+/)*[^"/]+)?'.
  		"|(?<=')\\\\*\./(?:(?:[^'/]+/)*[^'/]+)?";
  	$Ext= $indicator[0]==='.' ? substr($indicator,2) : $indicator;
  	$Ext='(?<=url\()(?:[^"\')/]+/)*[^"\')/]+\.(?:'.$Ext.')(?=\))'.
  		'|(?<=")(?:[^"/]+/)*[^"/]+\.(?:'.$Ext.')(?=")'.
  		"|(?<=')(?:[^'/]+/)*[^'/]+\.(?:".$Ext.")(?=')".
  		'|(?<=\\\\")(?:[^"/]+/)*[^"/]+\.(?:'.$Ext.')(?=\\\\")'.
  		"|(?<=\\\\')(?:[^'/]+/)*[^'/]+\.(?:".$Ext.")(?=\\\\')";
  	if ($indicator==='.') $pattern=$Dot;
  	else $pattern= $indicator[0]==='.' ? $Ext.'|'.$Dot : $Ext;
  	$pattern='@('.$pattern.')@ix';
  	$split=preg_split($pattern, $source, -1, PREG_SPLIT_DELIM_CAPTURE);
  
  // to relative path
  
  	if ($type==='relative') {
  		$less_depth=$php_depth<$tpl_depth ? $php_depth : $tpl_depth;
  		for ($i=0; $i<$less_depth; $i++) {
  			if ($php_dirs[$i]!=$tpl_dirs[$i]) break;
  		}
  		$rel_path_pfx = $php_depth>$i ? str_repeat('../',$php_depth-$i) : '';
  		if ($tpl_depth>$i) {
  			$reducible = $tpl_depth - $i;
  			$rel_path_pfx.=implode('/',array_slice($tpl_dirs, $i)).'/';
  		} else {
  			$reducible = 0;
  		}
  		for ($i=1,$s=count($split); $i<$s; $i+=2) {
  			if (substr($split[$i], 0, 1)==='\\') {
  				$split[$i]=substr($split[$i],1);
  				continue;
  			}
  			$split[$i] = preg_replace('@^(\./)+@','',$split[$i]);
  			if ($reducible && preg_match('@^((?:\.{2}/)+)@', $split[$i], $m)) {
  				$reduce = substr_count($m[1], '../');
  				if ($reduce > $reducible) $reduce = $reducible;
  				$split[$i] = preg_replace('@(?:[^/]+/){'.$reduce.'}$@', '', $rel_path_pfx) . preg_replace('@^(\.{2}/){'.$reduce.'}@','',$split[$i]);
  			} else {
  				$split[$i] = $rel_path_pfx . $split[$i];
  			}
  		}
  		return implode('', $split);
  	}
  
  // to absolute path
  
  
  	$path_search =array_keys($path_filter);
  	$path_replace=array_values($path_filter);
  	if (empty($document_root)) {
  
  
  		if ($web_depth===1) {
  			$base_path=implode('/', $php_dirs);
  		} else {
  			$less_depth=($web_depth<$php_depth ? $web_depth : $php_depth)-1;
  				
  			$web_test=array_reverse($web_dirs);
  			$php_test=array_reverse($php_dirs);
  
  
  			for ($i=0; $i<$less_depth; $i++) {
  				if ($web_test[$i]!=$php_test[$i]) break;
  			}
  
  			$base_path=implode('/', $i ? array_slice($php_dirs, 0, -$i) : $php_dirs);
  			if ($i<$web_depth-1) {
  				array_unshift($path_search, '/^/');
  				array_unshift($path_replace, implode('/', $i ? array_slice($web_dirs, 0, -$i) : $web_dirs));
  			}
  		}
  		$base_length =strlen($base_path);
  	} else {
  		if ($on_ms) $document_root=preg_replace('@\\\\+@', '/', $document_root);
  		$base_length =strlen($document_root);
  		if ($on_ms && strtolower(substr($tpl_path, 0, $base_length))!==strtolower($document_root)
  			|| !$on_ms && substr($tpl_path, 0, $base_length)!==$document_root) {
  			$tpl->report('Error #34', '"adjustPath" : template file <b>'.$tpl_path.'</b> is not in document root(<b>'.$document_root.'</b>)\'s sub directory', true);
  			$tpl->exit_();
  		}
  	}
  	$abs_path_pfx=preg_replace('@[^/]+$@', '', $tpl_path);
  	for ($i=1,$s=count($split); $i<$s; $i+=2) {
  		if (substr($split[$i], 0, 1)==='\\') {
  			$split[$i]=substr($split[$i],1);
  			continue;
  		}
  		if (!$src=realpath($abs_path_pfx.$split[$i])) {
  			if (preg_match('@^((?:\.{1,2}/)+)@', $split[$i], $m)) {
  				$src=preg_replace('@(?:[^/]+/){'.substr_count($m[1],'../').'}$@', '', $abs_path_pfx)
  					.preg_replace('@^(\.{1,2}/)+@','',$split[$i]);
  			} else {
  				$src=$abs_path_pfx . $split[$i];
  			}
  		}
  		if ($on_ms) $src = preg_replace('@\\\\+@', '/', $src);
  		$split[$i]=substr($src, $base_length);
  		if ($path_search) $split[$i]=preg_replace($path_search, $path_replace, $split[$i]);
  	}
  	return implode('', $split);
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/prefilter.customtag.php
  
  Index: prefilter.customtag.php
  ===================================================================
  <?php
  
  function customtag($source,$tpl) {
  	$GLOBALS['__HTML__'] = $tpl->tpl_path;
  	$GLOBALS['__html__'] = ereg_replace('^'.getenv('DOCUMENT_ROOT').'/','',$GLOBALS['__HTML__']);
  	$dir = 'cache/dynamic/'.$GLOBALS['__html__'];
  	$d = dir($dir);
  	if ($d) {
  		while ($file = $d->read()) {
  			if ($file == '.' || $file == '..') continue;
  			if (is_dir($file)) continue;
  			@unlink($dir.'/'.$file);
  		}
  	}
  	return preg_replace_callback(
  		"%<wa:([^ ]+) ([^>]*)( /|>(.*)</wa:\\1)>%isU",
  		'cb_customtag',
  		$source
  	);
  }
  
  function _parse_attr($str) {
  	$ret = array();
  	while (eregi('([0-9a-zA-Z_]*)[ =]*[^\"]\"([^\"]*)\"', $str, &$reg)) { 
  		$key = $reg[1];
  		$val = $reg[2];
  		$ret[$key] = $val;
  		$q = "($key)[ =]*[^\"]\"$val\"";
  		$str = eregi_replace($q, "", $str);
  	}
  	return $ret;
  }
  
  function cb_customtag(&$match) {
  	$tagName = $match[1];
  	$_attr = $match[2];
  	$innerHTML = $match[4];
  	$attr = _parse_attr($match[2]);
  	switch ($tagName) {
  		case 'applet':
  			if ($innerHTML) {
  				$hash = md5($innerHTML);
  				$dynTemplate = 'cache/dynamic/'.$GLOBALS['__html__'].'/'.$hash;
  				if (!is_file($dynTemplae)) {
  					savetofile($dynTemplate,$innerHTML);
  				}
  				if (!$attr['template']) $attr['template'] = $dynTemplate;
  			}
  			$ret = "<?\n";
  			$ret.= "WebApp::call('".$attr['module']."',".array2php($attr).");";
  			$ret.= "\n?>";
  			return $ret;
  		case 'component':
  			break;
  
  		case 'tree':	// Ʈ Ʈ
  			$ret = "<script>";
  			$ret.= "WebApp.Import('xtree.js');";
  			$ret.= "WebApp.Import('xmlextras.js');";
  			$ret.= "WebApp.Import('xloadtree.js');";
  			$ret.= "WebApp.ImportCSS('xtree.css');";
  			$ret.= "</script>\n";
  			$ret.= "<script>document.write(new WebFXLoadTree('".
  				$attr['text']."', '".
  				$attr['src']."','".
  				$attr['onaction']."','explorer'));</script>";
  			return $ret;
  			break;
  		case 'paging':	// ¡ Ʈ
  			$ret = "<script>WebApp.Import('lib.paging.js');</script>\n";
  			$ret.= "<script>document.write(new Paging(".$attr['total']."));</script>";
  			return $ret;
  		case 'marquee':
  			break;
  		case 'button':
  			break;
  		case 'select':
  			break;
  		case 'checkbox':
  			break;
  		case 'radio':
  			break;
  		case 'datepicker':
  			break;
  		case 'calendar':
  			break;
  		default:
  			break;
  	}
  }
  
  function array2php($arr) {
  	if (is_array($arr)) {
  		$ret = array();
  		foreach ($arr as $key=>$value) {
  			$ret[] = $key."=>\"".addslashes($value)."\"";
  		}
  		return "array(".implode(',',$ret).")";
  	}
  }
  
  function savetofile($path,$content) {
  	$parts = explode("/", $path);
  	$filename = array_pop($parts);
  	for ($i=0;$i<count($parts);$i++) {
  		$_path.= $parts[$i]."/";
  		if (!is_dir($path)) @mkdir($_path,0777);
  	}
  	$fp = fopen($path,'w');
  	fwrite($fp,$content);
  	fclose($fp);
  	return is_file($path);
  }
  //http://debianusers.org/albums/album02/girl1067849774.jpg
  ?>
  
  
  1.1                  siminweb/lib/Template_/prefilter.parseMySyntax.php
  
  Index: prefilter.parseMySyntax.php
  ===================================================================
  <?php
  
  /* PREFILTER EXAMPLE */
  
  function parseMySyntax($source, $tpl)
  {
  	$map=array(
  		'{include '=>'{#',
  		'{loop '=>'{@',
  		'{switch '=>'{?',
  		'{case '=>'{:',
  		'{if '=>'{?',
  		'{elseIf '=>'{:',
  		'{else '=>'{:',
  		'{loopelse '=>'{:',
  		'{endloop '=>'{/',
  		'{endswitch '=>'{/',
  		'{endif '=>'{/',
  	);
  	return strtr($source, $map);
  	/*
  	$map=array(
  		'/<!BeginLoop:([\w\x80-\xff]+)>/ie'=>'"{@".strtolower("$1")."}"',
  		'/<!LoopElse>/i'  =>'{:}',
  		'/<!EndLoop>/i'   =>'{/}',
  		'/<!Else>/i'      =>'{:}',
  		'/<!EndIf>/i'     =>'{/}',
  		'/{url_self}/i'   =>'{_SERVER.PHP_SELF}',
  		'/<!If:OddRow>/i' =>'{?.index_ % 2}',
  	);
  	switch (basename($tpl->tpl_path)) {
  	case 'bbslist.htm':
  		$map=array_merge($map, array(
  			'/{Num}/i'        =>'{start-.list}',
  			'/{Title(:?)}/i'  =>'{.rec.title}',
  			'/{Title:(\d+)}/i'=>'{=getSting(.rec.title,$1)}',
  			'/{Date}/i'       =>'{=substr(.rec.date, 3, 8)}',
  			'/{Hit}/i'        =>'{.rec.hit}',
  			'/{Name(:?)}/i'   =>'{.rec.name}',
  			'/{Name:(\d+)}/i' =>'{=getSting({.rec.name}, $1)}',
  		));
  		break;
  	case 'bbsread.htm':
  		$map=array_merge($map, array(
  			'/{Title(:?)}/i'  =>'{data.title}',
  			'/{Title:(\d+)}/i'=>'{=getSting(.data.title, $1)}',
  			'/{Name(:?)}/i'   =>'{data.name}',
  			'/{Name:(\d+)}/i' =>'{=getSting(.data.name, $1)}',
  			'/{Email}/i'      =>'{=encrypt(.data.email)}',
  			'/{Tname(:?)}/'   =>'{.trec.name}',
  			'/{Tname:(\d+)}/i'=>'{=getSting(.trec.name, $1)}',
  			'/{Tdate}/i'      =>'{=substr(.trec.date, 3, 8)}',
  			'/{Tcontent}/i'   =>'{=htmlspecialchars(.trec.text)}',
  		));
  		break;
  	}
  	$search=array_keys($map);
  	$replace=array_values($map);
  	return preg_replace($search, $replace, $source);
  	*/
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/prefilter.ssi.php
  
  Index: prefilter.ssi.php
  ===================================================================
  <?php
  
  /* PREFILTER EXAMPLE */
  
  function ssi($source, $tpl)
  {
  	$map = array(
  		"/<!-- #include (file|virtual)='([^'\?]+)\??([^']*)' -->/ie" => '"<?php parse_str(\"$3\"); include \"$2\"; ?>"'
  	);
  	$search=array_keys($map);
  	$replace=array_values($map);
  	return preg_replace($search, $replace, $source);
  
  	$map=array(
  		'<!-- #include file="'=>'<?php include "',
  		'" -->'=>'";?>',
  	);
  	return strtr($source, $map);
  }
  ?>
  
  
  1.1                  siminweb/lib/Template_/prefilter.webapp.php
  
  Index: prefilter.webapp.php
  ===================================================================
  <?php
  
  function webapp($source,$tpl) {
  	return eregi_replace('</head>','<script language="Javascript1.2" src="/js/WebApp.js"></script>'."\n".'</head>',$source);
  }
  ?>
  
  


comfuture    04/11/24 21:25:19

  Added:       lib      class.AttachFile.php class.DB.php class.Display.php
                        class.ExtraData.php class.FtpClient.php
                        class.HTTP.php class.IniFile.php
                        class.QueryString.php class.SkyTemplate.php
                        class.SkyTemplate_withDaddy.php class.Template_.php
                        class.Template_Compiler.php class.Thumbnail.php
                        class.WebApp.php tmp.image_alpha.php
                        wrapper.WebApp.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/lib/class.AttachFile.php
  
  Index: class.AttachFile.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.AttachFile.php
  *   : ÷ 
  *   ¥: 2003-06-05
  * ۼ: ģ
  ***********************************************/
  
  define (UPLOAD_ORIGINAL,0);
  define (UPLOAD_TIMESTAMP,1);
  define (UPLOAD_UNIQID,2);
  
  class AttachFile {
  
  	var $path;
  	var $ext;
  	var $naming;
  
  	function AttachFile($naming=UPLOAD_ORIGINAL,$ext="") {
  		if ($naming) $this->setNamingMethod($naming);
  		if ($ext) $this->setSaveExt($ext);
  	}
  
  	function setSavePath($path) {
  		$this->path = $path;
  	}
  
  	function setSaveExt($ext) {
  		$this->ext = $ext;
  	}
  
  	function setNamingMethod($naming) {
  		$this->naming = $naming;
  	}
  
  	function save() {
  		$argv = func_get_args();
  		$argc = func_num_args();
  
  		if ($argc > 0) {
  			foreach($argv as $item) {
  				$UPLOAD_FILES[$i] = &$_FILES[$item];
  			}
  		} else {
  			$UPLOADED_FILES = &$_FILES;
  		}
  
  		if (count($UPLOADED_FILES) <= 0) return;
  
  		$ret = array();
  		foreach ($UPLOADED_FILES as $file) {
  			if (is_array($file['name'])) {
  				// todo:  ʵ   ø  ó
  			} else {
  				if ($file['size'] == 0) continue;
  
  				$ext = AttachFile::extSplit($file['name'],$noext);
  				if ($this->ext) $ext = $this->ext;
  				if ($this->naming == UPLOAD_TIMESTAMP) {
  					$noext = date("U");
  				} elseif ($this->naming == UPLOAD_UNIQID) {
  					srand((double)microtime()*1000000);
  					$noext = md5(uniqid(rand(),1));
  				}
  
  				$seq = 0;
  				do {
  					$savename = "${noext}_${seq}.${ext}";
  					$savepath = $this->path."/${savename}";
  					$seq++;
  				} while (is_file($savepath));
  				$seq = 0;
  
  				if (is_uploaded_file($file['tmp_name'])) {
  					move_uploaded_file($file['tmp_name'],$savepath);
  					$ret[] = array(
  						filename => $file['name'],
  						filetype => $ext,
  						filesize => filesize($savepath),
  						filepath => $savepath
  					);
  				}
  			}
  		}
  		return $ret;
  	}
  
  	function extSplit($fileName,&$noext) {
  		$dot = strrpos($fileName,".");
  		$noext = substr($fileName,0, $dot);
  		return ($ext = substr($fileName,$dot+1)) ? $ext : "noext";
  	}
  }
  ?>
  
  
  1.1                  siminweb/lib/class.DB.php
  
  Index: class.DB.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.DB.php
  *   : 
  *   ¥: 2003-12-02
  * ۼ: ģ
  ***********************************************
  * 
  * 2004-06-09 php 5 Ȱ ϵ   - ģ
  */
  
  if (!defined('__DB_CLASS')) define(__DB_CLASS,'__DB_CLASS');
  
  class DB {
  	var $conn;
  	//var $error;
  	var $bindObj;
  	var $config = array(
  		'array_key_case'	=>	CASE_LOWER	// BearTemplate  빮    ĪϹǷ ҹڷ ޾Ƴ° ȥ!
  	);
  
  	/**
  	* <pre>
  	* DB Ŭ static Ŭ  ȣȯ  ڰ ִ.
  	* php4  ش db Ŭ ٷ Ǿ ڽ üϰ, php5  ޼ҵ  binding ȴ.
  	* </pre>
  	* 
  	*/
  	function DB($dsn='default') {
  		$thisObj = &$this;
  		$thisObj = (object)DB::dsn($dsn);
  		$this->bindObj = $thisObj;
  	}
  
  	function __call($method,$args) {
  		if (is_object($this->bindObj)) {
  			$_CLASS = $this->bindObj;
  			return call_user_func_array(array(&$_CLASS,$method),$args);
  		}
  	}
  
  	function __get($varname) {
  //		return $varname;
  		switch ($varname) {
  			case 'error':
  				return $this->bindObj->error;
  		}
  	}
  
  	function dsn($conf) {
  		$info = WebApp::getConf("database.${conf}");
  		$ret = &DB::singleton($info['dbms'],$info['host'],$info['user'],$info['pass'],$info['db']);
  		return $ret;
  	}
  
  	function Connection($dsn) {
  		$info = @parse_url($dsn);
  //		$info['db'] = str_replace('/','',$info['path']);
  		$info['db'] = substr($info['path'],1);
  		$ret = &DB::singleton($info['scheme'],$info['host'],$info['user'],$info['pass'],$info['db']);
  		return $ret;
  	}
  
  
  	function &singleton($scheme,$host,$user,$pass,$db) {
  		static $instance;
  		$signature = serialize(array($scheme, $host, $user, $pass, $db));
          $class = 'DB_'.$scheme;
  		if (is_object($instance[$signature])) {
  			return $instance[$signature];
  		} else {
  			require_once dirname(__FILE__)."/DB/$scheme.php";
  			$instance[$signature] = &new $class($host,$user,$pass,$db);
  			return $instance[$signature];
  		}
  	}
  
  	//==-- Must override --==//
  	//function query($sql) {
  	//	return /* result resource */;
  	//}
  
  	//function fetch($result=null) {
  	//	if ($result == null) $result = &$this->result;
  	//}
  	//==-- --==//
  
  	function fetchOne($result=null,$offset=0,$length=1) {
  		if ($result == null) $result = &$this->result;
  		$data = $this->fetch($result);
  		if (is_array($data)) $ret = @array_slice($data,$offset,$length);
  		else return;
  		if (count($ret) < 2) {	//  ϳϰ array ƴ Į..
  			$ret = array_values($ret);
  			$ret = $ret[0];
  		}
  		return $ret;
  	}
  
  	function fetchAll() {
  		$ret = array();
  		while ($ret[] = $this->fetch($this->config['fetch_mode']));
  		@array_pop($ret);
  		return $ret;
  	}
  
  	//==-- Automate --==//
  	/**
  	* @deprecated
  	*/
  	function sqlQuery($sql) {
  		return $this->query($sql);
  	}
  
  	function sqlFetch($sql) {
  		if ($this->query($sql)) return $this->fetch($this->config['fetch_mode']);
  	}
  
  	/**
  	* @deprecated
  	*/
  	function sqlFetchArray($sql) {
  		if ($this->query($sql)) return $this->fetch($this->config['fetch_mode']);
  	}
  
  	function sqlFetchAll($sql,$mode=MYSQL_ASSOC) {
  		if ($this->query($sql)) return $this->fetchAll($mode);
  	}
  
  	/**
  	* @deprecated
  	*/
  	function sqlDataArray($sql,$mode=MYSQL_ASSOC) {
  		return $this->sqlFetchAll($sql,$mode);
  	}
  
  	function sqlFetchOne($sql,$offset=0,$length=1) {
  		if ($result = $this->query($sql)) return $this->fetchOne($result,$offset,$length);
  	}
  
  	/**
  	* @deprecated
  	*/
  	function sqlResult($sql,$offset=0,$length=1) {
  		return $this->sqlFetchOne($sql,$offset,$length);
  	}
  	//==-- --==//
  	// {{{  ڵȭ
  	function insertQuery($table,$data) {
  		if (is_array($data)) {
  			foreach ($data as $key=>$val) $item[$key] = $this->quote($val);
  		}
  		if (count($this->item)) {
  			$columns = implode(', ',array_keys($item));
  			$values = implode(', ',array_values($item));
  			$query = "INSERT INTO $table ($columns) VALUES ($values)";
  			return $this->sqlQuery($query);
  		}
  	}
  
  	function updateQuery($table,$data,$cond) {
  		if (is_array($data)) {
  			foreach ($data as $key=>$val) $item[$key] = $this->quote($val);
  		}
  		if (count($item)) {
  			$str = array();
  			foreach ($item as $key=>$val) {
  				$str[] = $key."=".$item[$key];
  			}
  			$query = "UPDATE $table SET ".implode(', ',$str)." WHERE $cond";
  			return $this->sqlQuery($query);
  		}
  	}
  
  	function quote($value) {
  		return "'".$value."'";
  	}
  	// }}}
  }
  ?>
  
  
  
  1.1                  siminweb/lib/class.Display.php
  
  Index: class.Display.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.Display.php
  *   : ÷ Ŭ (Template_ Ȯ)
  *   ¥: 2004-07-23
  * ۼ: ģ
  * ---------------------------------------------
  ***********************************************/
  
  require_once dirname(__FILE__)."/class.Template_.php";
  
  class Display extends Template_ {
  	var $template_dir = '.';
  	var $compile_dir = 'cache/template';
  	var $cache_dir = 'cache/output';
  	var $prefilter = 'customtag|webapp';
  
  	function Display() {
  		$this->layout = @parse_ini_file('conf/layout.conf.php',true);
  		if (func_num_args()) $this->setLayout(func_get_arg());
  	}
  
  	function setLayout($conf='default') {
  		if ($_GET['ch']) $conf = $_GET['ch'];
  		$layout = $this->layout[$conf]['LAYOUT'];
  		if ($conf == 'blank') {
  			$this->define('LAYOUT','html/layout_blank.htm');
  		} elseif ($conf == 'default' || !is_file($layout)) {
  			$this->define('LAYOUT','html/layout_default.htm');
  		} else {
  			$this->define($this->layout[$conf]);
  		}
  
  	}
  
  	function printAll() {
  		if ($this->tpl_['CONTENT']) $this->print_('LAYOUT');
  	}
  }
  
  ?>
  
  
  1.1                  siminweb/lib/class.ExtraData.php
  
  Index: class.ExtraData.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.ExtraData.php
  *   : ⺻׸  serialize
  *   ¥: 2003-06-20
  * ۼ: ģ
  ***********************************************/
  
  class ExtraData {
  	var $data;
  
  	function ExtraData() {
  		$this->data = array();
  	}
  
  	function pack() {
  		foreach ($_REQUEST as $key=>$val) {
  			if ($key[0] == 'x' && $key[1] == '_') {	
  				$this->data[$key] = $val;
  			}
  		}
  		return (count($this->data)) ? addslashes(serialize($this->data)) : "";
  	}
  
  	function unpack($extra) {
  		return unserialize(stripslashes($extra));
  	}
  }
  
  if ($_SERVER["PATH_TRANSLATED"] == realpath(__FILE__)) {
  	$extra = new ExtraData;
  	echo $extra->pack();
  }
  ?>
  
  
  1.1                  siminweb/lib/class.FtpClient.php
  
  Index: class.FtpClient.php
  ===================================================================
  <?
  /**************************************
  * ϸ: class.FtpClient.php
  * ۼ: 2003-02-24
  * ۼ: ģ
  *   : ftp Ŭ̾Ʈ
  * <Ĺ>
  ***************************************/
  
  /*
  2003-03-02 queue  ߰
  2003-07-02 put_r  ߰
  2003-11-05 put_r  ݹԼ  ߰
  2004-01-04 ftp Ʈ 21 ƴҰ쿡  ó
  */
  
  define(FTP_AUTO,2);
  define(FTP_DIRECTTO_BROWSER,1);
  
  /** 
  * ftp Ŭ̾Ʈ Ŭ
  * 
  * @author ģ (comfuture@maniacamp.com)
  * @date 2003-02-24
  * @access public
  * @see http://kr.php.net/manual/kr/ref.ftp.php
  */
  class FtpClient {
  
  	var $conn;
  	var $addr;
  	var $user;
  	var $pass;
  	var $error;
  	var $queue;
  	var $debug;
  	var $osType;
  	var $transMode;
  	var $_transModeAutoSelect;
  
  	/** 
  	* ASCII  ϱ ϴ  Ȯڸ մϴ.
  	* Ŭ̾Ʈ 尡 FTP_AUTO ( Ŭ ̴  )϶ ڵ 带 Ҷ ˴ϴ.
  	*
  	* @var array
  	*/
  	var $forceAsciiExts = array(
  		"txt","html","htm","php","php3","inc","phtml","pl","py","c","cpp","h","sql"
  	);
  
  	function FtpClient($address="",$user="anonymous",$pass="ftpclient@phpclass") {
  		if (!@function_exists("ftp_connect")) {
  			$this->raiseError("ýۿ ftp Լ   ϴ");
  			return false;
  		}
  		if ($address) $this->connect($address,$user,$pass);
  		$this->queue = array();
  		$this->error = array();
  		register_shutdown_function(array(&$this,"close"));
  	}
  
  	/** 
  	* ftp  մϴ.
  	* $user $pass   anonymous  õմϴ.
  	* 
  	* @param string $address :  ftp ּ
  	* @param string $user : α  ̵ (default "anonymous")
  	* @param string $pass : α  н (default "ftpclient@phpclass")
  	* @return boolean
  	*/
  	function connect($address, $user="anonymous",$pass="ftpclient@phpclass") {
  		$this->addr = $address;
  		$this->user = $user;
  		$this->pass = $pass;
  		$this->port = 21;
  
  		if (strpos($this->addr,':')) {
  			$_tmp = explode(':',$this->addr);
  			$this->addr = $_tmp[0];
  			$this->port = $_tmp[1];
  		}
  
  
  		$this->conn = @ftp_connect($this->addr,$this->port);
  		if ($this->conn) {
  			if (!@ftp_login($this->conn,$this->user,$this->pass)) {
  				$this->raiseError("̵ Ǵ н尡 Ʋϴ");
  				return false;
  			}
  			$this->osType = @ftp_systype($this->conn);
  			$this->setMode(FTP_AUTO);
  		} else {
  			$this->raiseError("   ϴ");
  			return false;
  		}
  		return true;
  	}
  
  	/** 
  	* ۽  带 մϴ.
  	* FTP_AUTO     Ȯڸ  ڵ 带 մϴ.
  	* 
  	* @param int $mode {FTP_ASCII, FTP_BINARY, FTP_AUTO}  
  	* @return true
  	*/
  	function setMode($mode=FTP_AUTO) {
  		if ($mode == FTP_AUTO) {
  			$this->_transModeAutoSelect = true;
  		} else {
  			$this->_transModeAutoSelect = false;
  			$this->transMode = $mode;
  		}
  		return true;
  	}
  
  	/** 
  	* passive 带  ΰ θ մϴ.
  	*  ȭ ڿ  passive  ؾ ۼ մϴ.
  	* 
  	* @param boolean $mode passive  on Ǵ off
  	* @return boolean  ȯ  
  	*/
  	function pasv($mode) {
  		return @ftp_pasv($this->conn,$mode);
  	}
  
  	/**
  	*  丮 path 
  	* 
  	* @return string
  	*/
  	function pwd() {
  		return @ftp_pwd($this->conn);
  	}
  
  	/** 
  	*  丮 ̵մϴ.
  	* 
  	* @return string  ̵   ۾丮, н false
  	*/
  	function cdup() {
  		if (@ftp_cdup($this->conn)) {
  			return @ftp_pwd($this->conn);
  		} else {
  			$this->raiseError(" 丮 ̵  ϴ");
  			return false;
  		}
  
  	}
  
  	/** 
  	* 丮 ۼմϴ.
  	* 
  	* @param string $dir ۼ 丮
  	* @return boolean ۼ 
  	*/
  	function mkdir($dir) {
  		return (@ftp_mkdir($this->conn,$dir));
  	}
  
  	/** 
  	* ۾ 丮 մϴ
  	* 
  	* @param string $path  丮
  	* @return string 丮 ̵  ̵ ۾ 丮, н false
  	*/
  	function chdir($path) {
  		if (@ftp_chdir($this->conn,$path)) {
  			return @ftp_pwd($this->conn);
  		} else {
  			$this->raiseError("丮   ϴ");
  			return false;
  		}
  	}
  
  	/** 
  	* 丮 մϴ.
  	* $recursive true ϰ  丮 ϱ  ϴ.
  	*
  	* @param string $dir  丮
  	* @param $recursive 丮     (defualt: false)
  	* @return boolean  
  	*/
  	function rmdir($dir,$recursive=false) {
  		if ($recursive) {
  			$list = @ftp_nlist($this->conn,$dir);
  			if (is_array($list)) {
  				foreach($list as $item) {
  					if (@ftp_size($this->conn,"$dir/$item") == -1) {
  						$this->rmdir("$dir/$item");
  					} else {
  						@ftp_delete($this->conn,"$dir/$item");
  					}
  				}
  			}
  		}
  		if (!@ftp_rmdir($this->conn,$dir)) {
  			$this->raiseError("丮   ϴ");
  			return false;
  		}
  		return true;
  	}
  
  	/** 
  	*  ۾丮   ҷɴϴ.
  	* $detail  true ΰ  , ۼ, ϱ  ڼ Ʈ ø 迭 մϴ.
  	* 
  	* @param string $dir   丮
  	* @param boolean $detail ڼ   
  	*/
  	function getList($dir="./", $detail=true) {
  		if ($detail) {
  			$ret = @ftp_rawlist($this->conn,$dir);
  			if (is_array($ret)) {
  				array_walk($ret,array($this,"_cbParse"));
  			}
  		} else {
  			$ret = @ftp_nlist($this->conn,$dir);
  		}
  		return $ret;
  	}
  
  	/** 
  	* ϸ մϴ.
  	* 
  	* @param string $from  ϸ
  	* @param string $to ٲ ϸ
  	* @return boolean ̸ 
  	*/
  	function rename($from,$to) {
  		return (@ftp_rename($this->conn, $from, $to));
  	}
  
  	/** 
  	*   η űϴ.
  	* rename   .. Ǹ ؼ ϴ.
  	* 
  	* @param $file ̵ų ϸ
  	* @param $dir Ÿ 丮
  	* @return boolean ̵ 
  	*/
  	function move($file,$dir) {
  		return (@ftp_rename($this->conn, $file, "$dir/$file"));
  	}
  
  	/** 
  	*  մϴ.
  	* 
  	* @param string $file  ϸ
  	* @return boolean  
  	*/
  	function delete($file) {
  		return @ftp_delete($this->conn,$file);
  	}
  
  	/** 
  	*  permission ٲٱ
  	* 
  	* @param string $file ۹̼  ϸ
  	* @param int $mode   (ex. 0777)
  	* @return boolean   
  	*/
  	function chmod($file,$mode) {
  		return @ftp_site($this->conn, "CHMOD $mode $file");
  	}
  
  	/** 
  	*  ftp  մϴ.
  	* 
  	* @param stirng $localFile ǻͿ ִ  
  	* @param string $remoteFile      ϸ
  	* @return boolean  
  	*/
  	function put($localFile,$remoteFile="") {
  		if ($this->_transModeAutoSelect == true) $this->_chooseMode($localFile);
  		if (!$fp = @fopen($localFile,"r")) {
  			$this->raiseError("Į   ϴ");
  			return false;
  		} else {
  			if (!$remoteFile) {
  				$remoteFile = $this->pwd().array_pop(explode("/",$localFile));
  			}
  			return (@ftp_put($this->conn, $remoteFile, $localFile, $this->transMode));
  		}
  	}
  
  	/** 
  	*   ftp  մϴ.
  	* 
  	* @param stirng $localDir ǻͿ ִ 
  	* @param string $remoteDir   
  	* @return boolean  
  	*/
  	function put_r($localDir,$remoteDir=".",$callback=null) {
  		if (!is_dir($localDir)) return $this->raiseError("Į 丮 ã  ϴ");
  		$d = dir($localDir);
  //		$wholesize = `du -s $localDir`;
  		while($file = $d->read()) {
  			if ($file != "." && $file != "..") {
  				if (is_dir($localDir."/".$file)) {
  					if (!$this->chdir($remoteDir."/".$file)) {
  						$this->mkdir($remoteDir."/".$file);
  					}
  					$this->put_r($localDir."/".$file, $remoteDir."/".$file, $callback);
  				} else {
  					$this->put($localDir."/".$file, $remoteDir."/".$file);
  					$filesize = filesize("$localDir/$file");
  				}
  				if ($callback != null) {
  					call_user_func($callback,$filesize,"$remoteDir/$file");
  				}
  			}
  		}
  		$d->close();
  	}
  
  	/** 
  	* κ  ޾ƿɴϴ.
  	* $localFile  ʾҰų FTP_DIRECTTO_BROWSER Ȱ  ٿεݴϴ.
  	* 
  	* @param string $remoteFile ٿ ϸ
  	* @param mixed $localFile  ϸ Ǵ FTP_DIRECTTO_BROWSER ( ٿε )
  	* @return boolean ٿε 
  	*/
  	function get($remoteFile,$localFile="") {
  		if ($this->_transModeAutoSelect == true) $this->_chooseMode($remoteFile);
  		if (!$localFile) { }	// ϸ  ʾ ٿε ο   ()
  		if ($localFile == FTP_DIRECTTO_BROWSER) {
  			if (headers_sent()) {
  				$this->raiseError(" ̹ ۵Ǿϴ.");
  				return false;
  			}
  			$localFile = tempnam("/tmp","FTPTMP_");
  			@ftp_get($this->conn, $localFile, $remoteFile, $this->transMode);
  			$filename = array_pop(explode("/",$remoteFile));
  
  			// ̺κ  ʿ
  			Header("Content-type: file/unknown");
  			Header("Content-Length: ".filesize($localFile));
  			Header("Content-Disposition: attachment; filename=$filename");
  			Header("Expires: 0"); 
  
  			$fp = fopen($localFile,"r");
  			@fpassthru($fp);
  			@fclose($fp);
  			@unlink($localFile);
  		} else {
  			return @ftp_get($this->conn, $localFile, $remoteFile, $this->transMode);
  		}
  	}
  
  	// ۾Ͽ ߰ ()
  	function queue($type,$targetFile,$destFile="") {
  		$this->queue[] = array(
  			type	=>	$type,
  			target	=>	$targetFile,
  			dest	=>	$destFile
  		);
  		return true;
  	}
  
  	// ۾  ()
  	function cue() {
  		if (count($this->queue) > 0) {
  			foreach($thie->queue as $item) {
  				$this->$item['type']($item['target'],$item['dest']);
  			}
  		}
  	}
  
  	/**
  	* ftp  մϴ
  	* 
  	*/
  	function close() {
  		@ftp_quit($this->conn);
  	}
  
  	/** 
  	* ftp Ŀ带  մϴ
  	* 
  	* @param string $cmd  ɶ
  	* @return boolean   ޽ Ǵ н false
  	*/
  	function exec($cmd) {
  		return (@ftp_exec($this->conn, $cmd));
  	}
  
  	// ߻Ŵ
  	function raiseError($msg) {
  		$this->error[] = $msg;
  		if ($this->debug) echo $msg."<br>\n";
  		return false;
  	}
  
  	//  
  	function showErrors() {
  		for($i=0,$cnt=count($this->error); $i<$cnt; $i++) {
  			echo $this->error[$i]."<br>\n";
  		}
  	}
  
  	// Ȯڿ    ڵ 
  	function _chooseMode($file) {
  		$ext = array_pop(explode(".",$file));
  		if (array_search($ext,$this->forceAsciiExts)) {
  			$this->transMode = FTP_ASCII;
  		} else {
  			$this->transMode = FTP_BINARY;
  		}
  		return $this->transMode;
  	}
  
  	// rawlist Ľ
  	function _cbParse(&$line) {
  		$types = array('d'=>"directory",'l'=>"link",'-'=>"file");
  		$ret = array();
  		if ($this->osType == "UNIX") {
  			if (ereg("([-dl])([rwxst-]{9}).* ([0-9]*) [a-zA-Z]+ [0-9: ]*[0-9] (.+)",$line,&$reg)) { 
  				$ret['type'] = $types[$reg[1]];
  				$ret['permission'] = $reg[2];
  				$ret['size'] = $reg[3]; 
  				$ret['filename'] = $reg[4]; 
  			}
  		} elseif ($this->osType == "NT") {
  			if(ereg("([-0-9]+ *[0-9:]+[PA]?M? +<DIR> {10})(.*)",$line,&$reg)) {
  				$ret['type'] = "directory";
  			} elseif(ereg("[-0-9]+ *[0-9:]+[PA]?M? +([0-9]+) (.*)",$line,&$reg)) { 
  				$ret['type'] = "file";
  			}
  			$ret['size'] = $reg[1];
  			$ret['filename'] = $reg[2];
  		}
  		if ($ret['type'] == "file") $ret['modifydate'] = @ftp_mdtm($this->conn, $ret['filename']);
  
  		$line = $ret;
  	}
  	
  }
  
  
  ?>
  
  
  1.1                  siminweb/lib/class.HTTP.php
  
  Index: class.HTTP.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * ϸ: lib/class.HTTP.php
  * ۼ: 2004-03-25
  * ۼ: ģ
  *   : HTTP 
  *****************************************************************
  * 
  */
  
  class HTTP_Request
  {
  	var $header;
  	var $var;
  	var $body;
  	var $path;
  
  	function HTTP_Request($header='',$body='')
  	{
  		$this->header = array();
  		$this->body = '';
  	}
  
  	function setPath($path='/')
  	{
  		$this->path = $path;
  	}
  
  	function setHeader($key,$value='')
  	{
  		if (is_array($key)) {
  			$this->header = array_merge($this->header,$key);
  		} else {
  			$this->header[$key] = $value;
  		}
  	}
  
  	function setVar($key,$value='')
  	{
  		if (is_array($key)) {
  			$this->var = @array_merge($this->var,$key);
  		} else {
  			$this->var[$key] = $value;
  		}
  	}
  
  	function setBody($msg='')
  	{
  		$this->body = urlencode($msg);
  	}
  
  	function build($method='GET')
  	{
  		if ($this->header) {
  			while (list($_key, $_val) = each($this->header)) {
  				$header.= $_key.": ".$_val."\r\n";
  			}
  		}
  		if ($this->var) {
  			while (list($_key, $_val) = each($this->var)) {
  				$query.= $_key."=".urlencode($_val)."&";
  			}
  		}
  		$body = $this->body;
  		if ($query) $body.= (($body) ? $body.'&' : '').substr($query,0,-1);
  		else $body = $this->body;
  
  		switch (strtoupper($method)) {
  			case "GET":
  				$str = "GET ".$this->path.'?'.$query. " HTTP/ 1.0\r\n";
  				$str.= $header."\r\n";
  				break;
  			case "POST":
  				$str = "POST ".$this->path." HTTP/ 1.0\r\n";
  				$str.= "Content-length: ".strlen($body)."\r\n";
  				$str.= $header."\r\n";
  				$str.= $body;
  				break;
  		}
  		return $str;
  	}
  }
  
  class HTTP_Response
  {
  	var $header;
  	var $body;
  
  	function HTTP_Response($header='',$body='')
  	{
  		$lines = split("\r\n",trim($header));
  		if ($lines) {
  			$arr = array();
  			foreach ($lines as $line) {
  				list($key,$value) = explode(':',$line,2);
  				$arr[$key] = $value;
  			}
  		}
  		$this->header = $arr;
  		$this->body = $body;
  	}
  }
  
  class HTTP
  {
  	var $conn;
  	var $host;
  	var $request;
  	var $response;
  
  	function HTTP($oRequest)
  	{
  		$this->request = $oRequest;
  	}
  
  	function Connection($url)
  	{
  		$_parts = parse_url($url);
  		if (!$_parts['port']) $_parts['port'] = 80;
  		@parse_str($_parts['query'],$_query);
  		$request = new HTTP_Request;
  		$request->setHeader('Host', $_parts['host']);
  		$request->setPath($_parts['path']);
  		$request->setVar($_query);
  		$o = new HTTP($request);
  		$o->host = $_parts['host'];
  		$o->port = $_parts['port'];
  		return $o;
  	}
  
  	function setHeader($key,$value='') {
  		return $this->request->setHeader($key,$value);
  	}
  
  	function setVar($key,$value='') {
  		return $this->request->setVar($key,$value);
  	}
  
  	function setBody($msg='')
  	{
  		$this->request->setBody($msg);
  	}
  
  	function post()
  	{
  		$this->_connect();
  		$this->setHeader('Content-type','application/x-www-form-urlencoded');
  		fputs($this->conn,$this->request->build('POST'));
  		return $this->result();
  	}
  
  	function get()
  	{
  		$this->_connect();
  		fputs($this->conn,$this->request->build('GET'));
  		return $this->result();
  	}
  
  	function result()
  	{
  		while(($line = fgets($this->conn,1024)) && trim($line) != "") {
  			$header.= $line;
  		}
  
  		while(!feof($this->conn)) {
  			$body.= fgets($this->conn,1024);
  		}
  
  		$this->response = new HTTP_Response($header,$body);
  		return $this->response;
  		//$this->_close();
  	}
  
  	function _connect()
  	{
  		$fp = fsockopen($this->host, $this->port, &$errno, &$errstr, 10);
  		if(!$fp) return $this->setError($this->host." ӿ ߽ϴ. $errno, $errstr");
  		$this->conn = $fp;
  	}
  
  	function reset()
  	{
  		$this->request = $this->response = null;
  	}
  
  	function setError($msg='')
  	{
  		if ($msg) echo $msg;
  		return false;
  	}
  }
  
  /*
  require_once "class.HTTP.php";
  
  $HTTP = HTTP::Connection("http://homepage.com/path/to/file");
  $HTTP->setHeader('test','1111');
  $HTTP->setVar('aaaa','2222');
  
  $ret = $HTTP->post();
  
  print_r($ret->header);
  echo $ret->body;
  */
  ?>
  
  
  1.1                  siminweb/lib/class.IniFile.php
  
  Index: class.IniFile.php
  ===================================================================
  <?
  /**************************************
  * ϸ: class.IniFile.php
  * ۼ: 2003-01-28
  * ۼ: ģ
  *   : ini    ٷ
  ***************************************/
  
  define(PROCESS_PLAIN,0);
  define(PROCESS_SECTION,1);
  define(IFEXIST_OVERWRITE,0);
  define(IFEXIST_WARNING,1);
  define(IFEXIST_ERROR,2);
  
  class IniFile {
  
  	var $file;
  	var $iniArray;
  	var $debug;
  	var $report;
  	var $_error;
  	var $_warning;
  	
  	function IniFile($file="") {
  		$this->iniArray = array();
  		$this->sections = array();
  		$this->_error = array();
  		$this->_warning = array();
  		if ($file) {
  			if (is_file($file)) {
  				$this->load($file);
  			} else {
  				$this->create($file);
  			}
  		}
  	}
  
  	function setDebug($mode=1) {
  		$this->debug = $mode;
  		return true;
  	}
  
  	function setErrorReport($mode="E") {
  		$this->report = $mode;
  		return true;
  	}
  
  	function create($file="",$mode=IFEXIST_WARNING) {
  		if ($file) $this->file = $file;
  		if (is_file($this->file)) {
  			if ($mode == IFEXIST_WARNING) {
  				$this->raiseWarning("File already exists [ $this->file ]");
  			} elseif ($mode == IFEXIST_ERROR) {
  				return $this->raiseError("File already exists [ $this->file ]");
  			}
  		}
  		return true;
  	}
  
  	function load($file) {
  		$this->file = $file;
  		if (!file_exists($this->file)) return $this->raiseError("File not exists [ $this->file ]");
  		return $this->_parse();
  	}
  
  	function save($file="",$mode=IFEXISTS_OVERWRITE) {
  		if ($file) $this->file = $file;
  		if (is_file($this->file)) {
  			if ($mode == IFEXIST_WARNING) {
  				$this->raiseWarning("File already exists [ $this->file ]");
  			} elseif ($mode == IFEXIST_ERROR) {
  				return $this->raiseError("File already exists [ $this->file ]");
  			}
  		}
  		$fp = @fopen($this->file,"w");
  		if (!$fp) return $this->raiseError("Can't open file for write [ $this->file ]");
  		if (!@fwrite($fp, $this->_combine())) $this->raiseError("Problem occured while write file [ $this->file ]");
  		@fclose($fp);
  		return true;
  	}
  
  	function clear() {
  		$this->iniArray = array();
  	}
  
  	function setVar($key,$value="",$section="") {
  		if (!$section) $section = "__HAS_NO_SECTION__";
  		if (!array_key_exists($section,$this->iniArray)) $this->iniArray[$section] = array(); // (PHP 4 >= 4.1.0)
  		$this->iniArray[$section][$key]['value'] = $value;
  		$this->debug("Save value: [ $section ] $key = $value");
  		return true;
  	}
  
  	function delVar($key,$section="__HAS_NO_SECTION__") {
  		if (array_key_exists($key,$this->iniArray[$section])) { // (PHP 4 >= 4.1.0)
  			unset($this->iniArray[$section][$key]);
  			$this->debug("Delete value: [ $section ] $key");
  		} else {
  			$this->raiseWarning("Nothing to delete");
  		}
  		return true;
  	}
  
  	function getVar($key,$section="__HAS_NO_SECTION__") {
  		if (!is_array($this->iniArray[$section])) {
  			$this->raiseWarning("No such section");
  			return;
  		}
  		if (array_key_exists($key,$this->iniArray[$section])) { // (PHP 4 >= 4.1.0)
  			$_ret = $this->iniArray[$section][$key]['value'];
  			if (eregi("(yes|true|on)",$_ret)) return true;
  			elseif (ereg("(no,false,off)",$_ret)) return false;
  			else return $_ret;
  		} else {
  			$this->raiseWarning("No such key");
  			return;
  		}
  	}
  
  	function getAll($mode=PROCESS_PLAIN) {
  		return parse_ini_file($this->file, $mode);
  	}
  
  	function debug($msg) {
  		if ($this->debug) echo $msg."<br>\n";
  	}
  
  	function raiseError($err) {
  		$this->_error[] = $err;
  		if ($this->debug || strstr($this->report,"E")) {
  			echo $err."<br>\n";
  		}
  		return false;
  	}
  
  	function raiseWarning($warn) {
  		$this->_warning[] = $warn;
  		if ($this->debug || strstr($this->report,"W")) {
  			echo $warn."<br>\n";
  		}
  	}
  
  	function _parse() {
  		$fp = @fopen($this->file,"r");
  		if (!$fp) return $this->raiseError("Can't open file [ $this->file ]");
  		$_section = "__HAS_NO_SECTION__";
  		while (!feof($fp)) { 
  			$_line = trim(fgets($fp,1024));
  			if ($_line == "") {
  				$this->iniArray[$_section][] = "";
  				continue;
  			} elseif ($_line[0] == ";") {
  				if (ereg("\;<\?/\*|;\*/\?>\)",$_line)) continue;
  				$this->iniArray[$_section][] = array(comment=>$_line);
  				continue;
  			}
  
  			if ($_line[0] == "[" && $_line[strlen($_line) -1] == "]") {
  				$_section = substr($_line, 1, strlen($_line) - 2);
  				continue;
  			} elseif (strstr($_line,";")) {
  				$_pos = strpos($_line,"=");
  				$_key = rtrim(substr($_line, 0, $_pos));
  				$_data = ltrim(substr($_line ,$_pos + 1));
  				if ($_data[0] == "\"") {
  					$_endQuote = strpos($_data,"\"",1);
  					if ($_endQuote === false) {
  						$this->raiseWarning("Quotation is not valid at $_section.$_key");
  						$_value = "";
  					} else {
  						$_quote = true;
  						$_value = substr($_data,1,$_endQuote - 1);
  						$_sep = strpos($_data,";",$_endQuote);
  						$_comment = substr($_data, $_sep + 1);
  					}
  				} else {
  					$_sep = strpos($_data,";");
  					$_value = substr($_data, 0, $_sep);
  					$_comment = substr($_data, $_sep + 1);
  				}
  			} else {
  				$_pos = strpos($_line, "=");
  				$_key = rtrim(substr($_line, 0, $_pos));
  				$_value = ltrim(substr($_line, $_pos + 1));
  				if ($_value[0] == "\"") {
  					$_endQuote = strpos($_value,"\"",2);
  					if ($_endQuote === false) {
  						$_value = substr($_data,1);
  					} else {
  						$_value = $_data;
  					}
  				}
  			}
  
  			$this->iniArray[$_section][$_key] = array
  												(
  													value => $_value,
  													comment => $_comment
  												);
  			if ($_quote) $this->iniArray[$_section][$_key]['quote'] = true;
  			unset($_pos,$_key,$_value,$_comment,$_quote);
  		}
  		return true;
  	}
  
  	function _combine($safe=true) {
  		$_retStr = ($safe) ? ";<?/*\n" : "";
  		if (count($this->iniArray) <= 0) {
  			return $this->raiseError("Nothing to save");
  		} else {
  			$_sections = array_keys($this->iniArray);
  			for ($i=0; $i<count($_sections); $i++) {
  				if ($_sections[$i] != "__HAS_NO_SECTION__") $_retStr.= "[".$_sections[$i]."]\n";
  				foreach($this->iniArray[$_sections[$i]] as $_key=>$_data) {
  					if (is_numeric($_key)) {
  						$_retStr.= ($_data['comment']) ? $_data['comment'] : "";
  					} else {
  						$_retStr.= "$_key = ";
  						$_retStr.= ($_data['quote']) ? '"'.$_data['value'].'"' : $_data['value'];
  						$_retStr.= ($_data['comment']) ? $_data['comment'] : "";
  					}
  					$_retStr.= "\n";
  				}
  			}
  		}
  		if ($safe) $_retStr.= ";*/?>)";
  		return $_retStr;
  	}
  }
  
  
  1.1                  siminweb/lib/class.QueryString.php
  
  Index: class.QueryString.php
  ===================================================================
  <?
  /**************************************
  * ϸ: class.QueryString.php
  * : Ʈ Ľ, 
  * ۼ: 2003-04-18
  * ۼ: ģ
  ***************************************/
  
  class QueryString {
  	var $vars;
  
  	function QueryString($str="") {
  		if (!$str) $str = getenv("QUERY_STRING");
  		parse_str($str,$this->vars);
  	}
  
  	function setVar($key,$val="") {
  		if (is_array($key)) {
  			$this->vars = array_merge($this->vars,$key);
  		} else {
  			$this->vars[$key] = $val;
  		}
  		return $this->getVar();
  	}
  
  	function getVar($alter="") {
  		if (!$alter) $alter = &$this->vars;
  		$buff = array();
  		foreach ($alter as $_key=>$_val) if ($_val !== '') $buff[] = "$_key=$_val";
  		return "/?".implode("&",$buff);
  	}
  
  	function alterVar($key,$val="") {
  		if (is_array($key)) {
  			$alter = array_merge($this->vars,$key);
  		} else {
  			$alter = $this->vars;
  			$alter[$key] = $val;
  		}
  		return $this->getVar($alter);
  	}
  
  	function delVar() {
  		$argc = func_num_args();
  		$argv = func_get_args();
  		for ($i = 0; $i < $argc; $i++) {
  			unset($this->vars[$argv[$i]]);
  		}
  		return $this->getVar();
  	}
  }
  
  ?>
  
  
  
  1.1                  siminweb/lib/class.SkyTemplate.php
  
  Index: class.SkyTemplate.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.SkyTemplate.php
  *   : Sky Template Runtime Library
  *   : v1.0.0 RC1
  * ۼ: ϴþƺ (daddy@withsky.net)
  ***********************************************/
  /*
      # v1.0.0 RC1
          2004-10-01
              Release Candidate for v1.0.0
  */
  
  define("SKY_FUNC_PREFIX", "SkyTpl_Func_");
  
  class SkyTemplate
  {
      var $timeOffset   = 10000; // version relative : v1.00.00
      var $root         = ".";
      var $tplRoot      = "../tpl";
      var $tplDepth     = 0;
      var $compile      = true;
      var $inputFilter  = "";
      var $outputFilter = "";
      var $Top          = "";
      var $Parsed       = array();
      var $Included     = array();
      var $Data         = array();
      var $Size         = array();
      var $Col          = array();
      var $Target       = array();
      var $Func         = array();
      var $debug        = false;
      var $tplRewrite   = false;
      
      // Construtor
      function SkyTemplate($root="", $tplRoot="")
      {
          if ($root) $this->root = $root;
          if ($tplRoot) $this->tplRoot = $tplRoot;
          $this->Var = &$GLOBALS;
      }
  
      // define
      function define($var, $file="")
      {
          if (!is_array($var)) $var = array($var=>$file);
          
          foreach ($var as $key=>$file) {
              if (!preg_match("/^\/|:\/\//", $path)) $file = $this->root."/".$file;
              if (!is_file($file)) return $this->error("Template File Not Found! ($file)", $this->debug);
              // compile
              $func = $this->compile($file, $this->tplRoot);
              $this->Func[$key] = $func;
          }
      }
  
      // template file include
      function tinclude($file, $data="")
      {
          $func = $this->compile($file);
          if ($this->Included[$func] >= 5) return $this->error("Template File Cannot Be Included More Than 5 Times! ($file)", $this->debug);
  
          if ($data) {
              $this->assign($func, &$data, 1);
          } else {
              $this->assign($func);
          }
          $this->Included[$func]++;
          $this->tprint($func);
      }
  
      // block data assign
      function assign($var, $data="", $col_size=1)
      {
          if (func_num_args() == 1) {
              $size = $col_size = 1;
              $data = array(&$GLOBALS);
          } else if (func_num_args() == 2) {
              if ($data) {
                  if (!is_array($data[0])) $data = array(0=>$data); // 2 迭 
                  $size = $col_size = count($data);
              } else {
                  $size = $col_size = 0;
              }
          } else if (func_num_args() == 3) {
              if ($data) {
                  if (!is_array($data[0])) $data = array(0=>$data); // 2 迭 
                  $size = count($data);
              } else {
                  $size = $col_size;
                  $data = array_fill(0, $size, array()); // php5 error safe
              }
          }
          $this->Data[$var] = &$data;
          $this->Size[$var] = $size;
          $this->Col[$var] = $col_size;
          $this->Offset[$var] = 0;
  
          if (!preg_match("/^[0-9]/", $var)) $this->Top = $var;
      }
  
      // block , BearTemplate ȣȯ
      function parse($var, $data="")
      {
          $func = ($this->Func[$var]) ? $this->Func[$var] : $var;
          $func = "SkyTpl_Func_".$func;
          if (!function_exists($func)) return $this->error("Loop Block Not Exists! ($var)", $this->debug);
  
          if (func_num_args() == 1) {
              $this->assign($var);
          } else {
              $this->assign($var, $data);
          }
  
          ob_start();
          call_user_func($func, &$this, $var);
          $this->Var[$var] .= ob_get_contents();
          $this->Parsed[$var] = true;
          ob_end_clean();
          
          if (!preg_match("/^[0-9]/", $var)) $this->Top = $var;
      }
  
      // 
      function tprint($var="") {
          if (!$var) $var = $this->Top;
  
          if ($this->Parsed[$var]) {
              echo $this->Var[$var];
          } else {
              $func = ($this->Func[$var]) ? $this->Func[$var] : $var;
              $func = SKY_FUNC_PREFIX.$func;
              if (!function_exists($func)) return $this->error("Loop Block Not Exists! ($var)", $this->debug);
              call_user_func($func, &$this, $var);
          }
      }
  
      //  ȯ
      function &fetch($var="") {
          if (!$var) $var = $this->Top;
              
          if (!$this->Parsed[$var]) {
              ob_start();
              $this->tprint($var);
              $this->Var[$var] = ob_get_contents();
              ob_end_clean();
          }
          return $this->Var[$var];
      }
  
      // compile if not
      function compile($file, $tplRoot="")
      {
          static $DADDY;
  
          $tplRoot || $tplRoot = $this->tplRoot;
          $target = $tplRoot."/".SkyTemplate::getCompileFile($file);
          $func = SkyTemplate::getUniqueName($file);
  
          if (in_array($func, $this->Func)) {
              $this->error("File Already Compiled! ($file)", $this->debug);
              return $func;
          }
  
          if ($this->compile) {
              //clearstatcache();
              if (!strcmp($this->compile, "always") || !is_file($target) || (filemtime($file) + $this->versionTime != filemtime($target))) {
                  if (!$DADDY) {
                      include_once dirname(__FILE__)."/class.SkyTemplate_withDaddy.php";
                      $DADDY = new SkyTemplate_withDaddy(&$this);
                  }
                  $DADDY->compile($func, $file, $target);
                  $this->error("File Compiled : $file");
              }
          }
  
          // include
          if (is_file($target)) {
              include_once $target;
              return $func;
          } else {
              $fname = array_shift(explode("#", basename($file)));
              return $this->error("Compiled File Not Exists! ($fname)", $this->debug);
          }
      }
  
      // compile  
      // static call available
      function getCompileFile($path)
      {
          static $webRoot;
  
          if (!$webRoot) {
              $nowReal = str_replace("\\", "/", realpath("."));
              $nowVirtual = preg_replace("/^\/~[^\/]+/", "", dirname($_SERVER['PHP_SELF']));
  
              $pos = strpos($nowReal, $nowVirtual);
              if (is_int($pos)) {
                  $rootReal = substr($nowReal, 0, $pos);
              } else {
                  $depth = count(explode("/", $nowVirtual)) - 1;
                  $rootReal = implode("/", array_slice(explode("/", $nowReal), 0, -$depth));
              }
              $webRoot = $rootReal;
          }
  
          if (!preg_match("/^\/|:\/\//", $path)) {
              $path = str_replace(array("\\", $webRoot), array("/", ""), realpath($path));
          }
          $path = explode("/", $path);
          if ($this->tplDepth > 0) $path = array_slice($path, $this->tplDepth+1);
          //$path = array_reverse($path);
          $path = implode("%", $path).".php";
          return $path;
      }
  
      // compile   Լ
      // static call available
      function getUniqueName($file)
      {
          $hex = bin2hex(basename($file));
          $mtime = @filemtime($file);
          if ($hex && $mtime) {
              return $mtime."_".$hex;
          } else {
              return crypt($file, "00");
          }
      }
  
      // 
      function error($msg, $debug=false)
      {
          if ($debug) echo "\n<b>$msg</b><br>\n";
          return false;
      }
  }
  ?> 
  
  
  1.1                  siminweb/lib/class.SkyTemplate_withDaddy.php
  
  Index: class.SkyTemplate_withDaddy.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.SkyTemplate_withDaddy.php
  *   : Sky Template Compiler
  *   : v1.0.0 RC1
  * ۼ: ϴþƺ (daddy@withsky.net)
  ***********************************************/
  /*
      # v1.0.0 RC1
          2004-10-01
              Release Candidate for v1.0.0
  */
  
  class SkyTemplate_withDaddy
  {
      var $timeOffset   = 10000; // version relative : v1.00.00
      var $tplRoot      = "../tplCompile";
      var $inputFilter  = "";
      var $outputFilter = "";
      var $File         = array();
      var $Src          = array();
      var $Arr          = array();
      var $Code         = array();
      var $Index        = array();
      var $Target       = array();
      var $Time         = array();
      var $debug        = false;
      var $tplRewrite   = false;
  
      function SkyTemplate_withDaddy($obj="")
      {
          if ($obj) {
              if (is_object($obj)) {
                  $this->timeOffset = $obj->timeOffset;
                  $this->tplRoot = $obj->tplRoot;
                  $this->inputFilter = $obj->inputFilter;
                  $this->outputFilter = $obj->outputFilter;
                  $this->debug = $obj->debug;
                  $this->tplRewrite = $obj->tplRewrite;
              } else if (is_array($obj)) {
                  foreach ($obj as $key=>$val) {
                      $this->$key = $val;
                  }
              }
          }
      }
  
      function compile(&$var, $file, $target)
      {
          if ($this->File[$var]) return true;
  
          $dir = dirname($target);
          if (!is_dir($dir)) {
              if (!$this->makeDir($dir)) {
                  SkyTemplate::error("Directory Create Error! ($dir)", true);
                  exit;
              }
          }
  
          if ($fp = @fopen($file, "r")) {
              $this->Src[$var] = str_replace(array("<!--{{", "}}-->"), array("{{", "}}"), fread($fp, filesize($file)));
              fclose($fp);
  
              // input filter
              $this->filter($var, "INPUT");
  
              // rewrite orgin template file
              $this->tplRewrite($var, $file);
  
              // remove comment
              $this->comment($var);
  
              // parse template
              $this->parse($var);
  
              // output filter
              $this->filter($var, "OUTPUT");
  
              // finalize
              $this->Target[$var] = $target;
              $this->save($var, filemtime($file) + $this->versionTime);
  
              $this->File[$var] = $file;
              return $var;
  
          } else {
              return SkyTemplate::error("File Not Exists! ($file)", $this->debug);
          }
      }
  
      // apply filter
      function filter($var, $mode)
      {
          static $filterList;
          if (!is_array($filterList)) $filterList = array();
  
          if ($mode == "INPUT") {
              $filter = $this->inputFilter;
          } else if ($mode == "OUTPUT") {
              $filter = $this->outputFilter;
          }
          if (!$filter) return false;
  
          $tmp = explode(",", $filter);
          for ($i=0, $c=count($tmp); $i<$c; $i++) {
              $func = trim($tmp[$i]);
              if (!$filterList[$func]) {
                  $file = dirname(__FILE__)."/SkyTpl/plugin.$func.php";
                  if (!is_file($file)) return SkyTemplate::error("Plugin File Not Exists! ($file)", $this->debug);
                  include_once $file;
                  if (!function_exists($func)) return SkyTemplate::error("Plugin Function Not Exists! ($func)", $this->debug);
                  $filterList[$func] = $func;
              }
              call_user_func($func, &$this, &$var);
          }
      }
  
      // original template file rewrite
      // permssion needed!!
      function tplRewrite(&$var, $file)
      {
          if ($this->inputFilter && $this->tplRewrite) {
              if ($fp = @fopen($file, "w")) {
                  fwrite($fp, $this->Src[$var]);
                  fclose($fp); 
                  clearstatcache();
                  $org = $var;
                  $var = SkyTemplate::getUniqueName($file);
                  $this->Src[$var] = &$this->Src[$org];
                  echo SkyTemplate::error("<font color=red>Success To Rewrite Original Template File! (".basename($file).")</font><br>", true);
              } else {
                  echo SkyTemplate::error("<font color=red>Fail To Rewrite Original Template File!(".basename($file).")</font><br>", true);
              }
          }
      }
  
      // multi line ּ {{* *}}
      function comment($var)
      {
          $src = &$this->Src[$var];
          $tmp = explode("*}}", $src);
          $src = "";
          for ($i=0, $c=count($tmp)-1; $i<$c; $i++) {
              $arrToken = explode("{{*", $tmp[$i]);
              $cToken = count($arrToken);
              if ($cToken >= 2) {
                  $src .= $arrToken[0];
              } else {
                  $src .= $tmp[$i] . "*&#125;&#125;"; // *}}   ^^::
              }
          }
          $src .= $tmp[$c];
      }
  
      function parse($var)
      {
          $src = &$this->Src[$var];
          $code = &$this->Code[$var];
          $arr = array();
          $index = array();
          $z1 = -1;
          $z2 = 0;
  
          // parse
          $tmp = explode("{{", $src);
          $arr[$z2] = $tmp[0];
          for ($i=1, $c=count($tmp); $i<$c; $i++) {
              $z2 += 2;
              $z1 += 2;
              $flag = false;
              $arrToken = explode("}}", $tmp[$i]);
              $count = count($arrToken);
  
              if ($count >= 2) {
                  $tmpKey = ltrim($arrToken[0]);
                  $tmpEtc = implode("}}", array_slice($arrToken, 1));
                  $proc = $key = "";
  
                  //  :  ڵ ȯ  ⿡ ó
                  if (preg_match("/^([@\?:\/]|LOOP|IF|ELSE|END)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $arr[$z1] = substr($tmpKey, strlen($proc));
                      $index[$z1] = $proc;
                      $flag = true;
                  } else
                  // ø  include :    {} 
                  if (preg_match("/^(#|INC|INCLUDE)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $key = trim(substr($tmpKey, strlen($proc)));
                      if (!preg_match("/['\\\"]/", $key)) $key = "'".$key."'";
                      $key = trim($this->parseExpression($key));
                      $keyFunc = SkyTemplate::getUniqueName($key);
                      $arr[$z1] = "<? \$TPL->tinclude(".$key.", \$Data); ?>";
                      $flag = true;
                  } else
                  // include (normal php file)
                  if (preg_match("/^(\+|EXE|EXECUTE)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $key = trim(substr($tmpKey, strlen($proc)));
                      if (!preg_match("/['\\\"]/", $key)) $key = "'".$key."'";
                      $key = trim($this->parseExpression($key));
                      $arr[$z1] = "<? include ".$key."; ?>";
                      $flag = true;
                  } else
                  // php code
                  if (preg_match("/^(\$|PHP|PHPCODE)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $key = substr($tmpKey, strlen($proc));
                      $arr[$z1] = "<?".$key."?>";
                      $flag = true;
                  } else
                  // expression
                  if (preg_match("/^(=|EXP|EXPRESSION)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $key = $this->parseExpression(substr($tmpKey, strlen($proc)));
                      $arr[$z1] = "<?= ".$key."?>";
                      $flag = true;
                  } else
                  // escape
                  if (preg_match("/^(\\\\|ESC|ESCAPE)([\s]|$)/", $tmpKey, $match)) {
                      $proc = $match[1];
                      $key = substr($tmpKey, strlen($proc));
                      $tmp[$i] = $key."}}".$tmpEtc;
                      $flag = false;
                  } else
                  // 
                  if (preg_match("/^[a-zA-Z_\x7f-\xff.][a-zA-Z0-9_\x7f-\xff.]*$/", trim($tmpKey))) {
                      $key = $this->parseVar($tmpKey);
                      $arr[$z1] = "<?=".$key."?>";
                      $flag = true;
                  }
              }
              if ($flag) {
                  $arr[$z2] = (preg_match("/^[\r\n]/", $tmpEtc)) ? "\n".$tmpEtc : $tmpEtc;
              } else {
                  $arr[$z1] = "{{";
                  $arr[$z2] = $tmp[$i];
              }
          }
  
          // Src  
          $src = true;
  
          //   + ڵ ۼ
          $code = "<?";
          if ($index) {
              $loop   = array();
              $step = 0;
  
              foreach ($index as $idx=>$proc) {
                  //  
                  if (preg_match("/^(@|LOOP)$/", $proc)) {
                      $step++;
                      $loop[$step] = $idx;
                  } else
                  // IF
                  if (preg_match("/^(\?|IF)$/", $proc)) {
                      $step++;
                      $key = $this->parseExpression($arr[$idx]);
                      $arr[$idx] = "<? if (".$key.") { ?>";
                  } else
                  // ELSE : , else, else if
                  if (preg_match("/^(:|ELSE)$/", $proc)) {
                      if (isset($loop[$step])) {
                          $arr[$idx] = "<? }\n if (!\$_size) { ?>";
                      } else {
                          $key = trim($this->parseExpression($arr[$idx]));
                          $arr[$idx] = ($key) ? "<? } else if (".$key.") { ?>" : "<? } else { ?>";
                      }
                  } else
                  // END : , if
                  if (preg_match("/^(\/|END)$/", $proc)) {
                      if (isset($loop[$step])) {
                          $name = trim($this->parseQuote($arr[$loop[$step]], true, false)); // ּ 
                          $parent = ($step > 1) ? $arr[$loop[$step-1]] : $var;
                          // Լ 
                          $code .= $this->parseFunction($name, implode("", array_slice($arr, $loop[$step]+1, $idx-$loop[$step]-1)));
                          $arr[$loop[$step]] = "<? if (is_array(\$Data['$name'])) \$TPL->assign('$name', &\$Data['$name']); \$TPL->tprint('$name'); \$GLOBALS['$name'] = ''; ?>";
                          for ($i=$loop[$step]+1; $i<=$idx; $i++) $arr[$i] = ""; // unsetϸ ȵ
                          unset($loop[$step]);
                      } else {
                          $arr[$idx] = "<? } ?>";
                      }
                      $step--;
                  }
              }
          }
          $code .= $this->parseFunction($var, implode("", $arr));
          $code .= "?>";
  
          // Arr  
          $arr = true;
      }
  
      // Լȭ
      function parseFunction($name, $code)
      {
          $code = "\nfunction ".SKY_FUNC_PREFIX."$name(&\$TPL, \$_name) { \$_size = \$TPL->Size[\$_name]; "
                . "\$to = \$TPL->Offset[\$_name] + \$TPL->Col[\$_name]; "
                . "if (\$to > \$_size) \$to = \$_size; "
                . "for (\$_index=&\$TPL->Offset[\$_name]; \$_index<\$to; \$_index++) { "
                . "\$Data = &\$TPL->Data[\$_name][\$_index]; "
                . "?>\n".$code."\n<? "
                . "} }\n";
          return $code;
      }
  
      // ǥ ó
      function parseExpression($src)
      {
          $tmp = $this->parseQuote($src, false, false);
          $count = count($tmp);
  
          // ǥ         
          for ($i=0; $i<$count; $i+=2) {
              $tmp[$i] = preg_replace("/([^a-zA-Z_\x7f-\xff.\s]?[\s]*)([.]?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff.]*)([\s]*[^a-zA-Z0-9_\x7f-\xff.\s]?)/e", "\$this->parseVar('\\2', '\\1', '\\3');", $tmp[$i]);
          }
          // ǥ  : {}  
          for ($i=1; $i<$count; $i+=2) {
              $quote = substr($tmp[$i], 0, 1);
              $quotes = ($quote == "'") ? '"\'"' : "'\"'";
              $tmp[$i] = preg_replace("/(\{)([.]?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff.]*)(\})/e", "\$this->parseVar('\\2', '\\1', '\\3', $quotes);", $tmp[$i]);
          }
  
          return implode("", $tmp);
      }
  
      //  ó
      function parseVar($key, $p="", $n="", $quote="")
      {
          $key = preg_replace("/[.]{2,}/", ".", trim($key));
          if (preg_match("/[.]$/", $key)) {
              $key = substr($key, 0, -1);
              $n = ".".$n;
          }
          if ($quote) {
              $p = str_replace("{", $quote.".", $p);
              $n = str_replace("}", ".".$quote, $n);
          } else {
              $p = str_replace("{", "", $p);
              $n = str_replace("}", "", $n);
          }
  
          if (!is_int(strpos($n, "("))) {
              if ("." == substr($key, 0, 1)) {
                  $key = "\$GLOBALS['".str_replace(".", "']['", substr($key, 1))."']";
              } else if (preg_match("/^(_name|_size|_index)$/", $key)) {
                  $key = "\$".$key;
              } else {
                  $key = "\$Data['".str_replace(".", "']['", $key)."']";
              }
          }
          return $p . $key . $n;
      }
  
      // ǥ, ּ ó (PHP style not template)
      function parseQuote($src, $toString=false, $allowComment=false)
      {
          $arr = array();
          $comment = false;
          $commentType = "";
          $quote = false;
          $quoteType = "";
          $z = 0;
  
          $tmp = preg_split("/(['\\\"\n]|\/\*|\*\/|\/\/)/", $src, -1, PREG_SPLIT_DELIM_CAPTURE);
          $arr[$z] = $tmp[0];
          for ($i=1, $c=count($tmp); $i<$c; $i++) {
              switch ($tmp[$i]) {
                  case "\"" :
                  case "'" :
                      if ($comment) break; // comment  
  
                      $escape = false;
                      if (preg_match("/([\\\\]+)$/", $tmp[$i-1], $match)) {
                          if (strlen($match[1]) % 2) $escape = true;
                      }
                      if ($escape) {
                          $arr[$z] .= $tmp[$i];
                      } else {
                          $type = ($tmp[$i] == "\"") ? "DOUBLE" : "SINGLE";
                          if ($quote) {
                              $arr[$z] .= $tmp[$i];
                              if ($quoteType == $type) {
                                  $quote = false;
                                  $quoteType = "";
                                  $z++;
                              }
                          } else {
                              $quote = true;
                              $quoteType = $type;
                              $z++;
                              $arr[$z] = $tmp[$i];
                          }
                      }
                      break;
                  case "/*" :
                      if ($quote) {
                          $arr[$z] .= $tmp[$i];
                      } else {
                          if (!$comment) {
                              $comment = true;
                              $commentType = "MULTI";
                          }
                          if ($allowComment) $arr[$z] .= $tmp[$i];
                      }
                      break;
                  case "*/" :
                      if ($comment) {
                          if ($commentType == "MULTI") {
                              $comment = false;
                              $commentType = "";
                          }
                          if ($allowComment) $arr[$z] .= $tmp[$i];
                      } else {
                          $arr[$z] .= $tmp[$i];
                      }
                      break;
                  case "//" :
                      if ($quote) {
                          $arr[$z] .= $tmp[$i];
                      } else {
                          if (!$comment) {
                              $comment = true;
                              $commentType = "SINGLE";
                          }
                          if ($allowComment) $arr[$z] .= $tmp[$i];
                      }
                      break;
                  case "\n" :
                      if ($comment) {
                          if ($commentType == "SINGLE") {
                              $comment = false;
                              $commentType = "";
                              $arr[$z] .= $tmp[$i]; // single ϶ 
                          }
                      } else {
                          $arr[$z] .= $tmp[$i];
                      }
                      break;
                  default :
                      if ($quote || !$comment || $allowComment) {
                          $arr[$z] .= $tmp[$i];
                      }
                      break;
              }
          }
  
          if ($toString) {
              return implode("", $arr);
          } else {
              return $arr;
          }
      }
  
      function save($var, $timeStamp)
      {
          $code = &$this->Code[$var];
  
          //  
          if ($fp = @fopen($this->Target[$var], "w")) {
              fwrite($fp, $code);
              fclose($fp);
              chmod($this->Target[$var], 0666);
              touch($this->Target[$var], $timeStamp);
  
              // Code  
              $this->Code[$var] = true;
          } else {
              SkyTemplate::error("File Write Error! ($this->Target[$var])", $this->debug);
          }
      }
  
      function makeDir($path, $mod=0777)
      {
          $token = explode("/", $path);
          $dir = array_shift($token)."/";
          if (is_array($token)) {
              foreach ($token as $val) {
                  if ($val) {
                      $dir .= $val."/";
                      if (!is_dir($dir)) {
                          @mkdir($dir, $mod);
                          @chmod($dir, $mod);
                          if (!is_dir($dir)) return false;
                      }
                  }
              }
          }
          return true;
      }
  }
  
  ?> 
  
  
  1.1                  siminweb/lib/class.Template_.php
  
  Index: class.Template_.php
  ===================================================================
  <?php 
  
  // Template_ 2.2.3 2004-05-27 <xtac@xtac.net> http://www.xtac.net Freeware - LGPL
  
  class Template_
  {
  	var $compile_check = true;
  	var $compile_dir   = '_compile';
  	var $compile_ext   = 'php';
  	var $skin          = '';
  	var $notice        = false;
  	var $path_digest   = false;
  
  	var $template_dir  = '_template';
  	var $prefilter     = '';
  	var $postfilter    = '';
  	var $permission    = 0777;
  	var $safe_mode     = false;
  	var $auto_constant = false;
  
  	var $caching       = false;
  	var $cache_dir     = '_cache';
  	var $cache_expire  = 3600;
  	
  	var $scp_='';
  	var $var_=array(''=>array());
  	var $obj_=array();
  
  	function define($arg, $path='')
  	{
  		if ($path) $this->_define($arg, $path);
  		else foreach ($arg as $fid => $path) $this->_define($fid, $path);
  	}
  	function _define($fid, $path)
  	{
  		switch ($fid[0]) {
  		case '!': $this->tpl_[substr($fid,1)]=array('txt', $path); break;
  		case '>': $this->tpl_[substr($fid,1)]=array('php', $path); break;
  		case '#': $this->tpl_[substr($fid,1)]=array('str', $path); break;	//==-- define raw string --==//
  		default : $this->tpl_[$fid]=array('tpl', $path);
  		}
  	}
  	function assign($arg)
  	{
  		if (is_array($arg)) $var = array_merge($var=&$this->var_[$this->scp_], $arg);
  		else $this->var_[$this->scp_][$arg] = @func_get_arg(1);
  	}
  	function fetch($fid)
  	{
  		ob_start();
  		$this->print_($fid);
  		$fetch = ob_get_contents();
  		ob_end_clean();
  		return $fetch;
  	}
  	function print_($fid, $scope='', $sub=0)
  	{
  		if ($scope) $fid = $scope.'.'.$fid;
  		if (!isset($this->tpl_[$fid])) {echo ''; return;} //$this->exit_('Error #2', 'template id <b>'.$fid.'</b> is not defined');
  		$tpl=&$this->tpl_[$fid];
  
  		//==-- process raw string defined area -by maroo at 2004-07-23 --==//
  		if ($tpl[0]==='str') {
  			echo $tpl[1];
  			return;
  		}
  		//==-- --==//
  		if ($tpl[0]==='txt') {
  			$this->_print_txt($this->_get_compile_path($tpl[1]));
  			return;
  		}
  		if ($this->caching) {
  			if ($this->isCached($fid)) {
  				echo $this->_cache_info[$fid]['cont'];
  				return;
  			}
  			if (isset($this->_is_cached[$fid])) {
  				$cache=&$this->_cache_info[$fid];
  				ob_start();
  			}
  		}
  		if ($tpl[0]==='tpl') {
  			$cpl_path=$this->_get_compile_path($tpl[1]);
  			$tid = ($D=strrpos($fid,'.')) ? substr($fid, $D+1) : $fid;
  			if (isset($this->var_[$fid])) $scope=$fid;
  			if ($sub) {
  				$this->_include_tpl($cpl_path, $tid, $scope);
  			} else {
  				$this->ebase=error_reporting();
  				if ($this->notice) {
  					error_reporting($this->ebase|E_NOTICE);
  					set_error_handler('_template_notice_handler');
  					$this->_include_tpl($cpl_path, $tid, $scope);
  					restore_error_handler();
  				} else {
  					error_reporting($this->ebase&~E_NOTICE);
  					$this->_include_tpl($cpl_path, $tid, $scope);
  				}
  				error_reporting($this->ebase);
  			}
  		} else {
  			$this->_php_source=$tpl[1];
  			if ($sub) {
  				$this->etpl=error_reporting();
  				error_reporting($this->ebase);
  				if ($this->notice) {
  					restore_error_handler();
  					$this->_include_php();
  					set_error_handler('_template_notice_handler');
  				} else {
  					$this->_include_php();
  				}
  				error_reporting($this->etpl);
  			} else {
  				$this->_include_php();
  			}
  		}
  		if (isset($cache)) {
  			$text=ob_get_contents();
  			ob_end_flush();
  			$this->_make_dir($cache['path']);
  			$fp=fopen($cache['path'], 'wb');
  			fwrite($fp, strlen($text).'-'.$cache['cid'].'*'.$text);
  			fclose($fp);
  			chmod($cache['path'], $this->permission&~0111);
  			if ($cache['rid']) {
  				$R1=$this->cache_dir.'/%clear/';
  				$R2=$this->_get_clear_path($cache['cid']);
  				if (is_array($cache['rid'])) foreach ($cache['rid'] as $R) $this->_touch_clear_id($R1.$R.$R2);
  				else $this->_touch_clear_id($R1.$cache['rid'].$R2);
  			}
  		} elseif ($this->compile_check==='dev' && $this->caching && @is_dir($this->cache_dir)) {
  			$path = $this->cache_dir.'/%cache'.$_SERVER['PHP_SELF'];
  			$this->_rmdir($path, ini_get('safe_mode'));
  		}
  	}
  	function & new_($obj)
  	{
  		$class = 'tpl_object_'.strtolower($obj);
  		if (!isset($this->obj_[$class])) {
  			if (!class_exists($class)) include dirname(__file__).'/Template_/object.'.$obj.'.php';
  			$n = func_num_args();
  			if ($n>1) {
  				for ($i=1; $i<$n; $i++) {
  					$arg[$i]=func_get_arg($i);
  					$args[]='$arg['.$i.']';
  				}
  				eval('$this->obj_[$class]=new $class('.implode(',',$args).');');
  			} else {
  				$this->obj_[$class]=new $class;
  			}
  		}
  		return $this->obj_[$class];
  	}
  	function include_()
  	{
  		foreach (func_get_args() as $f) function_exists($f) or include dirname(__file__).'/Template_/function.'.$f.'.php';
  	}
  	function _include_tpl($TPL_CPL, $TPL_TPL, $TPL_SCP)
  	{
  		$TPL_VAR = &$this->var_[$TPL_SCP];
  		if (false===include $TPL_CPL) exit;
  	}
  	function _include_php()
  	{
  		if (false===include $this->_php_source) exit;
  	}
  	function _print_txt($path)
  	{
  		$fp=fopen($path, 'rb');
  		echo preg_replace('/^<\?.*?\?>(\r\n|\n|\r)?/s', '', fread($fp, filesize($path)));
  		fclose($fp);
  	}
  	function _get_compile_path($rpath)
  	{
  		$ext=trim($this->compile_ext) or $ext='php';
  		if ($R=strpos($rpath, '?')) {
  			$ext=substr($rpath, $R+1).'.'.$ext;
  			$rpath=substr($rpath, 0, $R);
  		}
  		$cpl_base=$this->compile_dir.'/'.($this->skin?$this->skin.'/':'').$rpath;
  		if ($this->path_digest) $cpl_base = $this->compile_dir.'/@digest/'.basename($rpath).'_'.md5($cpl_base);
  		$cpl_path=$cpl_base.'.'.$ext;
  		if (!$this->compile_check) return $cpl_path;
  		$tpl_path=$this->template_dir.'/'.($this->skin?$this->skin.'/':'').$rpath;
  		if (@!is_file($tpl_path)) $this->exit_('Error #1', 'cannot find defined template <b>'.$tpl_path.'</b>');
  		$tpl_path=realpath($tpl_path);
  		$cpl_head='<?php /* Template_ 2.2.3 '.date('Y/m/d H:i:s', filemtime($tpl_path)).' '.$tpl_path.' */';
  		if ($this->compile_check!=='dev' && @is_file($cpl_path)) {
  			$fp=fopen($cpl_path, 'rb');
  			$info=fread($fp, strlen($cpl_head));
  			fclose($fp);
  			if ($cpl_head===$info) return $cpl_path;
  		}
  		include_once dirname(__file__).'/class.Template_Compiler.php';
  		$compiler=new Template_Compiler_;
  		$compiler->_compile_template($this, $tpl_path, $cpl_base, $cpl_head);
  		return $cpl_path;
  	}
  	function setScope($scope='')
  	{
  		if (!isset($this->var_[$scope])) $this->var_[$scope]=array();
  		$this->scp_=$scope;
  	}
  	function setCache($fid, $time=1, $rid='', $cid='')
  	{
  		if (empty($this->tpl_[$fid])||$this->tpl_[$fid][0]==='txt') {
  			$this->exit_('Error #3', 'file id <b>'.$fid.'</b> passed to setCached() is not properly defined');
  		}
  		if ($time<0) unset($this->tpl_[$fid][2]);
  		else $this->tpl_[$fid][2]=array($time, $rid, $cid);
  	}
  	function isCached($fid)
  	{
  		if (!$this->caching || !isset($this->tpl_[$fid][2]) || $this->compile_check==='dev') return 0;
  		if (isset($this->_is_cached[$fid])) return $this->_is_cached[$fid];
  		$info =&$this->tpl_[$fid][2];
  		$rid  =$info[1];
  		$cid  =$fid.'/'.$this->skin.'/'.$this->tpl_[$fid][1].($info[2]?'/?'.base64_encode(serialize($info[2])):'');
  		$path =$this->cache_dir.'/%cache'.$_SERVER['PHP_SELF'].'/'.md5($cid);
  		$this->_cache_info[$fid]=array('rid'=>$rid, 'cid'=>$cid, 'path'=>$path);
  		if ($info[0]===1) $info[0] = $this->cache_expire;
  		if (@!is_file($path) or $info[0] && filemtime($path)+$info[0]<time()) return $this->_is_cached[$fid]=0;
  		if ($rid) {
  			$rdir1=$this->cache_dir.'/%clear/';
  			$rdir2=$this->_get_clear_path($cid);
  			if (is_array($rid)) {
  				foreach ($rid as $r) if (@!is_file($rdir1.$r.$rdir2)) return $this->_is_cached[$fid]=0;
  			} elseif (@!is_file($rdir1.$rid.$rdir2)) {
  				return $this->_is_cached[$fid]=0;
  			}
  		}
  		$fp=fopen($path, 'rb');
  		$text=fread($fp, filesize($path));
  		fclose($fp);
  		if (!$B=strpos($text,'-') or !$H=strpos($text,'*')) return $this->_is_cached[$fid]=0;
  		$byte=substr($text, 0, $B);
  		$head=substr($text, $B+1, $H-$B-1);
  		$text=substr($text, $H+1);
  		if ($head!=$cid || strlen($text)!=$byte) return $this->_is_cached[$fid]=0;
  		$this->_cache_info[$fid]['cont'] =$text;
  		return $this->_is_cached[$fid]=1;
  	}
  	function clearCache()
  	{
  		if (!($this->caching && $this->cache_dir && @is_dir($this->cache_dir))) return;
  		$safe_mode=ini_get('safe_mode');
  		if (!func_num_args()) $this->_rmdir($this->cache_dir, $safe_mode);
  		else foreach (func_get_args() as $dir) $this->_rmdir($this->cache_dir.'/%clear/'.$dir, $safe_mode);
  	}
  	function _rmdir($path, $php_safe_mode)
  	{
  		if (!$php_safe_mode) {
  			substr(__file__,0,1)==='/'
  				? @shell_exec('rm -rf "'.$path.'/"*')
  				: @shell_exec('del "'.str_replace('/','\\',$path).'\\*" /s/q');
  			return;
  		}
  		if (!$d = @dir($path)) return;
  		while ($f = @$d->read()) {
  			switch ($f) {
  			case '.': case '..': break;
  			default : @is_dir($f=$path.'/'.$f) ? $this->_rmdir($f, 1) : @unlink($f);
  			}
  		}
  	}
  	function _get_clear_path($cid)
  	{
  		$path=urlencode($_SERVER['PHP_SELF'].'?'.$cid);
  		strlen($path)%80 or $path.='@ff';
  		return '/%'.substr(chunk_split($path, 80, '/'), 3, -1);
  	}
  	function _touch_clear_id($path)
  	{
  		if (@is_file($path)) return;
  		$this->_make_dir($path);
  		@touch($path);
  		@chmod($path, $this->permission&~0111);
  	}
  	function _make_dir($path)
  	{
  		if (@is_dir(dirname($path))) return;
  		$dir=$this->cache_dir;
  		if (substr(__file__,0,1)!=='/') {
  			$dir =preg_replace('/\\\\+/', '/', $dir);
  			$path=preg_replace('/\\\\+/', '/', $path);
  		}
  		$dirs=explode('/', substr($path, strlen($dir)+1));
  		for ($nodir=0,$i=0,$s=count($dirs)-1; $i<$s; $i++) {
  			$dir.='/'.$dirs[$i];
  			if ($nodir or !@is_dir($dir) and $nodir=1) {
  				@mkdir($dir, $this->permission);
  				@chmod($dir, $this->permission);
  			}
  		}
  	}
  	function exit_($type, $msg)
  	{
  	//	exit("<br />\n".'<span style="font:12px tahoma,arial;color:#DA0000;background:white">Template_ '.$type.': '.$msg."</span><br />\n");
  		echo "<!-- Template_$type: ".$msg."-->";
  	}
  
  // Below methods are deprecated.
  	function loopLoad($id, $n=1)
  	{
  		if ($n===1) $this->b1= &$this->var_[$this->scp_][$id];
  		else $this->{'b'.$n}=&$this->{'b'.--$n}[count($this->{'b'.$n})-1][$id];
  	}
  	function loopPushAssign($arg, $n=1)
  	{
  		$this->{'b'.$n}[]=$arg;
  	}
  	function loopPushLoad($id, $n=2)
  	{
  		$this->{'b'.$n}=&$this->{'b'.--$n}[][$id];
  	}
  	function loopAssign($arg, $n=1)
  	{
  		$section = array_merge($section=&$this->{'b'.$n}[count($this->{'b'.$n})-1], $arg);
  	}
  	function setLoop($id, $arg, $n=1)
  	{
  		if ($n===1) $this->var_[$this->scp_][$id] = is_array($arg) ? $arg : array_pad(array(), $arg, 1);
  		else $this->{'b'.--$n}[count($this->{'b'.$n})-1][$id] = is_array($arg) ? $arg : array_pad(array(), $arg, 1);
  	}
  	function pushSetLoop($id, $arg, $n=2)
  	{
  		$this->{'b'.--$n}[][$id] = is_array($arg) ? $arg : array_pad(array(), $arg, 1);
  	}
  }
  function _template_notice_handler($type, $msg, $file, $line)
  {
  	$msg.=" in <b>$file</b> on line <b>$line</b>";
  	switch ($type) {
  	case E_NOTICE      :$msg='<span style="font:12px tahoma,arial;color:green;background:white">Template_ Notice #1: '.$msg.'</span>';break;
  	case E_WARNING     :
  	case E_USER_WARNING:$msg='<b>Warning</b>: '.$msg; break;
  	case E_USER_NOTICE :$msg='<b>Notice</b>: ' .$msg; break;
  	case E_USER_ERROR  :$msg='<b>Fatal</b>: '  .$msg; break;
  	default            :$msg='<b>Unknown</b>: '.$msg; break;
  	}
  //	echo "<br />\n".$msg."<br />\n";
  	echo "<!--".trim(strip_tags($msg))."-->";
  }
  ?>
  
  
  1.1                  siminweb/lib/class.Template_Compiler.php
  
  Index: class.Template_Compiler.php
  ===================================================================
  <?php
  
  /*---------------------------------------------------------------------------
  
    Program  : Template_
    Version  : 2.2.3
    Date     : 2004-05-27
    Author   : Hyeong-Gil Park
    Email    : xtac@xtac.net
    Homepage : http://www.xtac.net
    Licence  : LGPL (Freeware)
  
    Idea of "PHP document templating system" is from "FastTemplate".
    Idea of "compiling PHP template and template plugin" is from "Smarty".
    Idea of "caching" is from "Smarty, PEAR Cache, and CachedFastTemplate".
  
    Special thanks to Seung-Min Kwon, Jun-Sung Lee, Jin-Wook Cho,
    Soo-Kyeong Hong, Yo-Han Kim, Weon-Soon Lee, Jae-Gyun Yu, Sang-Wook Kang,
    Jae-Sik Kim, Myung-Soo Kim, Jang-Sik Kim, Sam-Goo Lee, Yo-Han Yang,
    Yeong-Gyu Jeon, Byeong-Hoon Kang, and Neotec(Ltd)
    for good suggestion and feedback.
  
   ----------------------------------------------------------------------------
  
    Template_ : PHP document templating system
    Copyright (C) 2003-2004 Hyeong-Gil Park
  
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.
  
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
  
    - http://www.gnu.org/copyleft/lgpl.html
  
    ---------------------------------------------------------------------------
  
    FastTemplate
      - http://www.thewebmasters.net/
    Smarty
      - http://smarty.php.net/
    Beyond Template Engine (using PHP as template language)
      - http://www.sitepoint.com/article/1218/
    BearTemplate
      - http://template.ze.to/
    Phemplate
      - http://pukomuko.esu.lt/phemplate/
    ASP.NET
      - http://www.asp.net/Tutorials/quickstart.aspx
    JSTL
      - http://java.sun.com/developer/technicalArticles/javaserverpages/faster/
    XSLT
      - http://www.w3.org/TR/xslt
    Velocity
      - http://jakarta.apache.org/velocity/user-guide.html
  
    ---------------------------------------------------------------------------*/
  
  class Template_Compiler_
  {
  	function _compile_template($tpl, $tpl_path, $cpl_base, $cpl_head)
  	{
  		$this->compile_dir   =$tpl->compile_dir;
  		$this->compile_ext   =$tpl->compile_ext;
  		$this->skin          =$tpl->skin;
  		$this->template_dir  =$tpl->template_dir;
  		$this->permission    =$tpl->permission or $this->permission = 0777;
  		$this->prefilter     =$tpl->prefilter;
  		$this->postfilter    =$tpl->postfilter;
  		$this->prefilters    =array();
  		$this->postfilters   =array();
  		$this->safe_mode     =$tpl->safe_mode;
  		$this->auto_constant =empty($tpl->auto_constant) ? false : $tpl->auto_constant;
  		$this->tpl_path      =$tpl_path;
  		$this->plugins       =array();
  		$this->func_plugins  =array();
  		$this->obj_plugins   =array();
  		$this->func_list     =array(''=>array());
  		$this->obj_list      =array(''=>array());
  		$this->method_list   =array();
  		$this->rsv_words     =array('index_', 'size_', 'key_', 'value_');
  		$this->key_words     =array('true','false','null');
  		$this->auto_globals  =array('_SERVER','_ENV','_COOKIE','_GET','_POST','_FILES','_REQUEST','_SESSION');
  		$this->constants     =array_keys(get_defined_constants());
  		$this->plugin_dir    =dirname(__FILE__) . '/Template_';
  		$this->on_ms         =substr(__FILE__,0,1)!=='/';
  		$functions           =get_defined_functions();
  		$this->all_functions =array_merge(
  			$functions['internal'],
  			$functions['user'],
  			array('isset','empty','eval','list','array','include','require','include_once','require_once')
  		);
  
  	// make compile directory
  		$cpl_ext =trim($this->compile_ext) or $cpl_ext='php';
  		$cpl_path=$cpl_base.'.'.$cpl_ext;
  		if ($this->on_ms) $cpl_path=strtr($cpl_path, array('\\\\'=>'/','\\'=>'/'));
  		if (!@is_file($cpl_path)) {
  			$dir=explode('/',$cpl_path);
  			$path=$dir[0];
  			for ($nodir=0,$i=1,$s=count($dir)-1; $i<$s; $i++) {
  				$path.='/'.$dir[$i];
  				if ($nodir or @!is_dir($path) and $nodir=1) {
  					if (false===mkdir($path, $this->permission)) {
  						$this->report('Error #1', 'cannot create compile directory <b>'.$path.'</b>');
  						$this->exit_();
  					}
  					$this->on_ms || @chmod($path, $this->permission);
  				}
  			}
  		}
  	
  	// get plugin file info
  		$plugins = array();
  		$match = array();
  		$d = dir($this->plugin_dir);
  		if (false === $d) {
  			$this->report('Error #2', 'cannot access plugin directory <b>'.$this->plugin_dir.'</b>');
  			$this->exit_();
  		}
  		while ($plugin_file = $d->read()) {
  			$plugin_path = $this->plugin_dir .'/'. $plugin_file;
  			if (!is_file($plugin_path) || !preg_match('/^(object|function|prefilter|postfilter)\.([^.]+)\.php$/i', $plugin_file, $match)) continue;
  			$plugin =strtolower($match[2]);
  			if ($match[1] === 'object') {
  				if (in_array($plugin, $this->obj_plugins)) {
  					$this->report('Error #3', 'plugin file <b>object.'.$match[2].'.php</b> is overlapped');
  					$this->exit_();
  				}
  				$this->obj_plugins[$match[2]] = $plugin;
  			} else {
  				switch ($match[1]) {
  				case 'function'  : $this->func_plugins[$match[2]]=$plugin; break;
  				case 'prefilter' : $this->prefilters[$match[2]]  =$plugin; break;
  				case 'postfilter': $this->postfilters[$match[2]] =$plugin; break;
  				}
  				if (in_array($plugin, $plugins)) {
  					$this->report('Error #4', 'plugin function <b>'.$plugin.'</b> is overlapped');
  					$this->exit_();
  				}
  				$plugins[]=$plugin;
  			}
  		}
  		$this->obj_plugins_flip = array_flip($this->obj_plugins);
  		$this->func_plugins_flip= array_flip($this->func_plugins);
  		$this->prefilters_flip  = array_flip($this->prefilters);
  		$this->postfilters_flip = array_flip($this->postfilters);
  
  	// get safe mode functions
  		if ($this->safe_mode) {
  			$safe_list_file = $this->plugin_dir.'/functions.safe_mode.ini';
  			if (@is_file($safe_list_file)) {
  				$fp=fopen($safe_list_file, 'rb');
  				$fc=fread($fp, filesize($safe_list_file));
  				fclose($fp);
  				$this->safe_mode_functions=preg_split('/\s+/', trim(strtolower(preg_replace('/;[^\n\r]*/','',$fc))));
  			} else {
  				$this->report('Warning #1', 'safe mode : cannot find safe function list file <b>'.$safe_list_file.'</b>', false, false);
  			}
  		}
  
  	// get template
  		$fp_tpl=fopen($tpl_path,'rb');
  		$source=fread($fp_tpl,filesize($tpl_path));
  		fclose($fp_tpl);
  
  	// disable php tag
  		if ($this->safe_mode) {
  			if (ini_get('short_open_tag')) $safe_map['/<\?/']='&lt;?';
  			else $safe_map['/<\?(php)/i']='&lt;?$1';
  			$safe_map['/(<script\s+language\s*=\s*)("php"|\'php\'|php)(\s*>)/i']='$1"SERVER-SIDE-SCRIPT-DISABLED"$3';
  			if (ini_get('asp_tags')) $safe_map['/<%/']='&lt;?';
  			$source=preg_replace(array_keys($safe_map),array_values($safe_map),$source);
  		}
  
  	// remove comments and get preprocessor
  		$nl_cnt=1;
  		$nl_del_sum=0;
  		$this->nl_del[0]=0;
  		$nl=preg_match('/\r\n|\n|\r/', $source, $match) ? $match[0] : "\r\n";
  		$escape_map=array('\\\\'=>'\\', "\\'"=>"'", '\\"'=>'"', '\\n'=>$nl, '\\t'=>"\t", '\\>'=>'>', '\\g'=>'>');
  		$split=preg_split('/(<!--{\*|\*}-->|{\*|\*})/', $source, -1, PREG_SPLIT_DELIM_CAPTURE);
  		for ($j=0,$i=0,$s=count($split); $i<$s; $i++) {
  			if (!($i%2)) {
  				$nl_cnt+=substr_count($split[$i], $nl);
  				continue;
  			}
  			switch ($split[$i]) {
  			case'<!--{*':
  			case    '{*':
  				if (substr($split[$i+1],0,1)=='\\') $split[$i+1]=substr($split[$i+1],1);
  				elseif (!$j) $j=$i;
  				break;
  			case '*}-->':
  			case '*}'   :
  				if (substr($split[$i-1],-1)==='\\')
  					$split[$i-1]=substr($split[$i-1],0,-1);
  				elseif ($j) {
  					if ($j===1) {
  						for ($def_area='',$k=2; $k<$i; $k++) $def_area.=$split[$k];
  						preg_match_all('@(?:(?:^|\r\n|\n|\r)[ \t]*)\#(prefilter|postfilter)[ \t]+
  							((?:"(?:\\\\\\\\|\\\\"|[^"])*")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*\')|(?:[^ \t\r\n]+))
  						@ix', $def_area, $match, PREG_PATTERN_ORDER);
  						for ($k=0,$t=count($match[0]); $k<$t; $k++) {
  							if ($this->safe_mode) $match[2][$k]=preg_replace('/<\?(php)/i', '&lt;?$1', $match[2][$k]);
  							if ($match[2][$k][0]==="'") $f_string=strtr(substr($match[2][$k],1,-1), $escape_map);
  							elseif ($match[2][$k][0]==='"') $f_string=strtr(substr($match[2][$k],1,-1), $escape_map);
  							else $f_string=$match[2][$k];
  							if (!trim($f_string)) {
  								$this->$match[1][$k]='';
  							} else {
  								$f_split=preg_split('@(?<!\\\\)\|@', $f_string);
  								if (!trim($f_split[0])) $this->$match[1][$k].=$f_string;
  								elseif (!trim($f_split[count($f_split)-1])) $this->$match[1][$k]=$f_string.$this->$match[1][$k];
  								else $this->$match[1][$k]=$f_string;
  							}
  						}
  						preg_match_all('@(?:(?:^|\r\n|\n|\r)[ \t]*)\#define[ \t]+
  							((?:"(?:\\\\\\\\|\\\\"|[^"])*")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*\')|(?:\S+))[ \t]+
  							((?:"(?:\\\\\\\\|\\\\"|[^"])*")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*\')|(?:\S+))
  						@ix', $def_area, $match, PREG_PATTERN_ORDER);
  						for ($k=0,$t=count($match[0]); $k<$t; $k++) {
  							if ($match[1][$k][0]==="'") $key = strtr(substr($match[1][$k],1,-1), $escape_map);
  							elseif ($match[1][$k][0]==='"') $key = strtr(substr($match[1][$k],1,-1), $escape_map);
  							else $key=strtr($match[1][$k], $escape_map);
  							if ($match[2][$k][0]==="'") $val = strtr(substr($match[2][$k],1,-1), $escape_map);
  							elseif ($match[2][$k][0]==='"') $val = strtr(substr($match[2][$k],1,-1), $escape_map);
  							else $val=strtr($match[2][$k], $escape_map);
  							$macro[$key]=$val;
  						}
  					}
  					for ($nl_sub_cnt=0,$k=$j; $k<=$i; $k++) {
  						$nl_sub_cnt += substr_count($split[$k], $nl);
  						$split[$k]='';
  					}
  					$split[$j-1]=preg_replace('/(^|\r\n|\n|\r)[ \t]*$/', '$1', $split[$j-1]);
  					if (preg_match('/^[ \t]*(\r\n|\n|\r)/', $split[$i+1])) {
  						$nl_del_sum++;
  						$split[$i+1]=preg_replace('/^[ \t]*(\r\n|\n|\r)/', '', $split[$i+1]);
  					}
  					$nl_del_sum += $nl_sub_cnt;
  					$nl_cnt -= $nl_sub_cnt;
  					$this->nl_del[$nl_cnt] = $nl_del_sum;
  					$j=0;
  				}
  			}
  		}
  		krsort($this->nl_del);
  		$source=implode('',$split);
  	
  	// apply macro
  		if (!empty($macro)) $source=strtr($source, $macro);
  	
  	// apply prefilter
  		if (trim($this->prefilter)) $source=$this->_filter($source, 'pre');
  	
  	// parse template
  		$this->_control_stack=array();
  		$this->_loop_depth=0;
  		$this->_loop_stack=array();
  		$this->_loop_info=array();
  		$this->_size_info=array();
  		$this->_size_prefix='';
  		$this->in_div ='';
  		$this->nl_cnt = 1;
  		$this->nl = preg_match('/\r\n|\n|\r/', $source, $match) ? $match[0] : "\r\n";
  	
  		$division=array();
  		$divnames=array();
  		$nl = $this->nl;
  		if ($this->safe_mode) {
  			$php_tag = '';
  		} else {
  			$php_tag = '<\?php|(?<!`)\?>';
  			if (ini_get('short_open_tag')) $php_tag .= '|<\?(?!`)';
  			if (ini_get('asp_tags'))  $php_tag .= '|<%(?!`)|(?<!`)%>';
  			$php_tag .= '|';
  			$php_quote_or_comment = '@"(\\\\\\\\|\\\\"|[^"])*?"|\'(\\\\\\\\|\\\\\'|[^\'])*?\'|//[^\r\n]*[\r\n]|/\*.*?\*/@s';
  		}
  		$this->_split=preg_split('/('.$php_tag.'<!--{(?!`)|(?<!`)}-->|{(?!`)|(?<!`)})/i', $source, -1, PREG_SPLIT_DELIM_CAPTURE);
  		for ($this->mark_php=0,$mark_tpl=0,$this->_index=0,$s=count($this->_split); $this->_index<$s; $this->_index++) {
  			if (!($this->_index % 2)) {
  				$this->nl_cnt += substr_count($this->_split[$this->_index], $nl);
  				continue;
  			}
  			switch (strtolower($this->_split[$this->_index])) {
  			case'<?php':
  			case   '<?':
  			case   '<%':
  				if (!$this->mark_php) $this->mark_php = $this->_index;
  				break;
  			case   '?>':
  			case   '%>':
  				if ($this->mark_php) {
  					$phpcode=implode('', array_slice($this->_split, $this->mark_php+1, $this->_index-$this->mark_php-1));
  					if (!preg_match('/"|\'/', implode('',preg_split($php_quote_or_comment, $phpcode)))) {
  						$this->mark_php=0;
  					}
  				}
  				break;
  			case'<!--{':
  			case    '{':
  				$mark_tpl = $this->_index;
  				break;
  			case '}-->':
  			case '}'   :
  				if ($mark_tpl!==$this->_index-2) break;
  				if (!$result=$this->_compile_statement($this->_split[$this->_index-1])) break;
  				if (is_array($result)) {
  					
  					// 1:echo, 2:control, 4:include, 8:division, 16:escape
  					
  					if ($this->mark_php) {
  						if ($result[0]===1) {
  							$this->_split[$this->_index-1]=substr($result[1], 4);
  							$this->_split[$mark_tpl]='';
  							$this->_split[$this->_index]='';
  						} else {
  							$this->report('Error #5', 'template control statement <b>{'.$this->statement.'}</b> in php code is not available', true, true);
  						}
  					} elseif ($result[0]===8) {
  						if ($result[1]) {
  							if (in_array($result[1], $divnames)) {
  								$this->report('Error #6', 'template division id <b>'.$result[1].'</b> is overlapped', true, true);
  								$this->exit_();
  							}
  							$divnames[]=$result[1];
  							$num=count($division);
  							$division[$num]=array('name'=>$result[1],'start'=>$this->_index-1);
  							if ($num && !isset($division[--$num]['end'])) $division[$num]['end']=$this->_index-1;
  							$this->in_div=$result[1];
  							$this->func_list[$result[1]]=array();
  							$this->obj_list[$result[1]]=array();
  						} elseif ($num=count($division) and !isset($division[--$num]['end'])) {
  							$division[$num]['end']=$this->_index-1;
  							$this->in_div='';
  						}
  						$this->_split[$mark_tpl-1] = preg_replace('/\s*$/',  '', $this->_split[$mark_tpl-1]);
  						if (preg_match('/^\s*/', $this->_split[$this->_index+1], $match)) {
  							$this->nl_cnt += (substr_count($match[0], $nl)-1);
  							$this->_split[$this->_index+1] = preg_replace('/^\s*/', $nl, $this->_split[$this->_index+1]);	
  						}
  						$this->_split[$this->_index-1]='';
  						$this->_split[$mark_tpl]='';
  						$this->_split[$this->_index]='';
  					} elseif ($result[0]===16) {
  						$this->_split[$this->_index-1]=$result[1];
  					} else {
  						if ($result[0]&6) $this->_split[$mark_tpl-1] = preg_replace('/(\r\n|\n|\r)[ \t]+$/', '$1', $this->_split[$mark_tpl-1]);
  						if ($result[0]&5 and preg_match('/^[ \t]*(\r\n|\n|\r)/', $this->_split[$this->_index+1])) {
  							$this->nl_cnt--;
  							$this->_split[$this->_index+1] = preg_replace('/^[ \t]*(\r\n|\n|\r)/', '$1$1', $this->_split[$this->_index+1]);
  						}
  						if ($this->_size_prefix) {
  							$result[1] = $this->_size_prefix . $result[1];
  							$this->_size_prefix='';
  						}
  						$this->_split[$this->_index-1]='<?php '.$result[1].'?>';
  						$this->_split[$mark_tpl]='';
  						$this->_split[$this->_index]='';
  					}
  				} elseif ($result === -1) {
  					$erlist[]=array(htmlspecialchars($this->_split[$this->_index-1]), $this->nl_cnt);
  				} elseif ($result === -2 || $result === -3) {
  					if ($result === -2) $this->report('Error #7', 'unexpected directive "<b>/</b>"', true, true);
  					elseif ($result === -3) $this->report('Error #8', 'unexpected directive "<b>:</b>"', true, true);
  					if (!empty($erlist)) foreach ($erlist as $er) $this->report('Warning #2', '<b>{'.$er[0].'}</b> may be syntax error', true, $er[1]);
  					$this->exit_();
  				}
  			}
  		}
  		if (!empty($this->_control_stack)) {
  			$this->report('Error #9', 'template loop or branch is not properly closed by <b>{/}</b>', true);
  			$this->exit_();
  		}
  		$source=trim(implode('',$this->_split));
  	
  	// apply postfilter
  		if (trim($this->postfilter)) $source=$this->_filter($source, 'post');
  	
  	// save result
  		$include=$this->_get_function().$this->_get_class();
  		$size_of_top_loop = empty($this->_size_info[1]) ? '' : $this->_get_loop_size(1);
  		$fp_cpl=fopen($cpl_path, 'wb');
  		if (false===$fp_cpl) {
  			$this->report('Error #10', 'cannot write compiled file "<b>'.$cpl_path.'</b>"');
  			$this->exit_();
  		}
  		fwrite($fp_cpl, $cpl_head.$include.$size_of_top_loop.'?>'.$nl.$source);
  		fclose($fp_cpl);
  		if (!$this->on_ms) @chmod($cpl_path, $this->permission&~0111);
  		if ($division) {
  			if (!isset($division[$num=count($division)-1]['end'])) $division[$num]['end']=$this->_index;
  			for ($i=0,$s=count($division); $i<$s; $i++) {
  				$div=&$division[$i];
  				$source=($i?$nl:'').trim(implode('', array_slice($this->_split, $div['start'], $div['end']-$div['start'])));
  			//
  				if (trim($this->postfilter)) $source=$this->_filter($source, 'post');
  			//
  				$include=$this->_get_function($div['name']).$this->_get_class($div['name']);
  				$size_of_top_loop = empty($this->_size_info[$div['name']]) ? '' : $this->_get_loop_size(1, $div['name']);
  				$fp_cpl=fopen($cpl_base.'.'.$div['name'].'.'.$cpl_ext, 'wb');
  				fwrite($fp_cpl, $cpl_head.$include.$size_of_top_loop.'?>'.$nl.$source);
  				fclose($fp_cpl);
  			}
  		}
  	}
  	function _compile_statement($statement)
  	{
  		$match=array();
  		preg_match('/^(\\\\*)\s*(:\?|[=#@?:\/+])?(.*)$/s', $statement, $match);
  		$src=preg_split('/((?:"(?:\\\\\\\\|\\\\"|[^"])*?")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*?\'))/', $match[3], -1, PREG_SPLIT_DELIM_CAPTURE);
  		for ($i=0;$i<count($src);$i+=2) {
  			if (($comment=strpos($src[$i],'//'))!==false) {
  				$src[$i]=substr($src[$i], 0, $comment);
  				break;
  			}
  		}
  		$src=trim(implode('', array_slice($src, 0, $i+1)));
  		$this->statement=htmlspecialchars($statement);
  		if ($match[1]) {
  			switch ($match[2]) {
  			case '#': return preg_match('/^[A-Z_a-z\x7f-\xff][\w\x7f-\xff]*$/',$src) ? array(16, substr($statement,1)) : 0;
  			case '+': return !strlen($src)||preg_match('/^[A-Z_a-z\x7f-\xff][\w\x7f-\xff]*$/',$src) ? array(16, substr($statement,1)) : 0;
  			case '/': return !strlen($src) ? array(16, substr($statement,1)) : 0;
  			case '?': return $this->_compile_branch($src,1,0)!==0 ? array(16, substr($statement,1)) : 0;
  			case ':': return !strlen($src)||$this->_compile_branch($src,1,1)!==0 ? array(16, substr($statement,1)) : 0;
  			case '' : return $this->_compile_expression($src,1,1)!==0 ? array(16, substr($statement,1)) : 0;
  			default : return $this->_compile_expression($src,1,0)!==0 ? array(16, substr($statement,1)) : 0;
  			}
  		}
  		switch ($match[2]) {
  		case ''  : return (($xpr=$this->_compile_expression($src,0,1))===0) ? 0 : array(1, 'echo '.$xpr);
  		case '=' : return (($xpr=$this->_compile_expression($src,0,0))===0) ? 0 : array(1, 'echo '.$xpr);
  		case ':?': return (($xpr=$this->_compile_expression($src,0,0))===0) ? 0 : array(2, '}elseif('.$xpr.'){'); // deprecated
  		case '+' : return !strlen($src)||preg_match('/^[A-Z_a-z\x7f-\xff][\w\x7f-\xff]*$/', $src) ? array(8, $src) : 0;
  		case '#' : return preg_match('/^[A-Z_a-z\x7f-\xff][\w\x7f-\xff]*$/',$src) ? array(4, '$this->print_("'.$src.'",$TPL_SCP,1);') : 0;
  		case '@' :
  			$xpr = preg_match('/^[A-Z_a-z\x7f-\xff][\w\x7f-\xff]*$/', $src) ? '' : $this->_compile_expression($src,0,0);
  			if ($xpr===0) return 0;
  			$d = ++$this->_loop_depth;
  			$this->_control_stack[]='@';
  			$this->_loop_info[$d]=array('index'=>$this->_index-1, 'foreach_bit'=>0);
  			if ($xpr) {
  				$this->_loop_stack[]='*';
  				return array(2, 'if(is_array($TPL_R'.$d.'='.$xpr.')&&!empty($TPL_R'.$d.')){');
  			}
  			if ($d>1 && in_array($src, $this->_loop_stack)) {
  				$this->report('Error #11', 'id of nested loop "<b>'.$src.'</b> in <b>{'.$this->statement.'}</b>" cannot be same as parent loop id', true, true);
  				$this->exit_();
  			}
  			$this->_size_info[$d][$src] = 1;
  			if ($d===1 && $this->in_div) $this->_size_info[$this->in_div][$src] = 1;
  			$this->_loop_stack[]=$src;
  			$this->_loop_info[$src]=$d;
  			return array(2, 'if($TPL_'.$src.'_'.$d.'){');
  		case '?' :
  			if (($stt=$this->_compile_branch($src,0,0))===0) return -1;
  			$this->_control_stack[]= substr($stt,0,2)==='if' ? '?' : '$';
  			return array(2, $stt);
  		case ':' :
  			if (strlen($src)) {
  				if (($stt=$this->_compile_branch($src,0,1))===0) return 0;
  				if (empty($this->_control_stack)) return -3;
  				switch (array_pop($this->_control_stack)) {
  				case '?':
  					if (($xpr=$this->_compile_expression($src,0,0))===0) return 0;
  					$this->_control_stack[]='?';
  					return array(2, '}elseif('.$xpr.'){');
  				case '$':
  					$this->_control_stack[]='$';
  					return array(2, 'break;'.$stt);
  				case 'else':
  					$this->report('Error #12', 'elseif statement "<b>{'.$this->statement.'}</b>" after else statement "{:}" is not available', true, true);
  					$this->_control_stack[]='default';
  					$this->exit_();
  					break;
  				case 'default':
  					$this->report('Error #13', 'case statement "<b>{'.$this->statement.'}</b>" after default statement "{:}" is not available', true, true);
  					$this->_control_stack[]='default';
  					$this->exit_();
  					break;
  				case 'loopelse':
  					$this->report('Error #14', 'elseif statement "<b>{'.$this->statement.'}</b>" after loopelse statement "{:}" is not available', true, true);
  					$this->_control_stack[]='loopelse';
  					$this->exit_();
  					break;
  				default : // loop
  					$this->report('Error #15', '"<b>{'.$this->statement.'}</b>" is not in proper position', true, true);
  					$this->_control_stack[]='@';
  					$this->exit_();
  				}
  			} else {
  				if (empty($this->_control_stack)) return -3;
  				switch (array_pop($this->_control_stack)) {
  				case '?':
  					$this->_control_stack[]='else';
  					return array(2, '}else{');
  				case '$':
  					$this->_control_stack[]='default';
  					return array(2, 'break;default:');
  				case 'else':
  					$this->report('Error #16', 'else statement "<b>{'.$this->statement.'}</b>" after else statement "{:}" is not available', true, true);
  					$this->_control_stack[]='else';
  					$this->exit_();
  					break;
  				case 'default':
  					$this->report('Error #17', 'default statement "<b>{'.$this->statement.'}</b>" after default statement "{:}" is not available', true, true);
  					$this->_control_stack[]='default';
  					$this->exit_();
  					break;
  				case 'loopelse':
  					$this->report('Error #18', 'else statement "<b>{'.$this->statement.'}</b>" after loopelse statement "{:}" is not available', true, true);
  					$this->_control_stack[]='default';
  					$this->exit_();
  					break;
  				default : // loop
  					$this->_close_loop();
  					$this->_control_stack[]='loopelse';
  					return array(2, '}}else{');
  				}
  			}
  		case '/' :
  			if (strlen($src)) return 0;
  			if (empty($this->_control_stack)) return -2;
  			if ('@'===array_pop($this->_control_stack)) {
  				$this->_close_loop();
  				return array(2,'}}');
  			}
  			return array(2,'}');
  		}
  	}
  	function _compile_branch($source, $escape=0, $case=0)
  	{
  		$expression = $source;
  		$case_pos=false;
  		$split=preg_split('/((?:"(?:\\\\\\\\|\\\\"|[^"])*?")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*?\'))/', $source, -1, PREG_SPLIT_DELIM_CAPTURE);
  		for ($i=0; $i<count($split); $i+=2) {
  			if (($case_pos=strpos($split[$i],':'))!==false) break;
  		}
  		if ($case_pos!==false) {
  			$expression = trim(implode('', array_slice($split, 0, $i))).substr($split[$i], 0, $case_pos);
  			$added_case = trim(substr($split[$i], $case_pos+1) . (count($split)>$i+1 ? trim(implode('', array_slice($split, $i+1))) : ''));
  		}
  		$xpr=$this->_compile_expression($expression, $escape, 0);
  		if ($xpr===0) return 0;
  		if ($case_pos!==false) {
  			$added_xpr=$this->_compile_branch($added_case, $escape, 1);
  			if ($added_xpr===0) return 0;
  			if ($escape) return 1;
  			return $case ? 'case '.$xpr.':'.$added_xpr : 'switch('.$xpr.'){'.$added_xpr;
  		}
  		if ($escape) return 1;
  		return $case ? 'case '.$xpr.':' : 'if('.$xpr.'){';
  	}
  	function _close_loop()
  	{
  		$loop_id = array_pop($this->_loop_stack);
  		$depth = $this->_loop_depth--;
  		$info = &$this->_loop_info[$depth];
  
  		// 1: key_, 2: value_, 4: index_, 8: size_
  		$_key = $info['foreach_bit']&1 ? '$TPL_K'.$depth.'=>' : '';
  		if ($info['foreach_bit']&4) {
  			$_idx1='$TPL_I'.$depth.'=-1;';
  			$_idx2='$TPL_I'.$depth.'++;';
  		} else {
  			$_idx1='';
  			$_idx2='';
  		}
  		$_sub_loop_size = empty($this->_size_info[$depth+1]) ? '' : $this->_get_loop_size($depth+1);
  		$split = &$this->_split[$info['index']];
  		$split = substr($split, 0, -2);
  		if ($loop_id==='*') {
  			$_size = $info['foreach_bit']&8 ? '$TPL_S'.$depth.'=count($TPL_R'.$depth.');' : '';
  			$split.= $_size.$_idx1.'foreach($TPL_R'.$depth.' as '.$_key.'$TPL_V'.$depth.'){'.$_idx2.$_sub_loop_size.'?>';
  		} else {
  			$split .= $_idx1.'foreach('.$this->_get_loop_array($loop_id, $depth).' as '.$_key.'$TPL_V'.$depth.'){'.$_idx2.$_sub_loop_size.'?>';
  		}
  		unset($this->_size_info[$depth+1], $this->_loop_info[$depth], $this->_loop_info[$loop_id]);
  	}
  	function _get_loop_size($depth, $div='')
  	{
  		$size  = '';
  		$array = $div ? $this->_size_info[$div] : $this->_size_info[$depth];
  		foreach ($array as $loop_id => $val) {
  			if (is_array($val)) {
  				// $this->report('Warning #3', '<b>'.$loop_id.'.size_</b> in <b>{'.$val[0].'}</b> has not corresponding loop', true, $val[1]);
  				// // For "size_" instead of count().
  			}
  			$loop_array = $this->_get_loop_array($loop_id, $depth);
  			$size .= $this->nl.'$TPL_'.$loop_id.'_'.$depth.'=empty('.$loop_array.')||!is_array('.$loop_array.')?0:count('.$loop_array.');';
  		}
  		return $size;
  	}
  	function _get_loop_array($loop_id, $depth)
  	{
  		if ($depth===1) {
  			if ($loop_id[0]==='_') {
  				if ($this->safe_mode) {
  					$this->report('Error #19', 'safe mode : global variable <b>'.$loop_id.'</b> in <b>{'.$this->statement.'}</b> is not available', true, true);
  					$this->exit_();
  				}
  				return in_array($loop_id, $this->auto_globals) ? '$'.$loop_id : '$GLOBALS["'.substr($loop_id, 1).'"]';
  			}
  			return '$TPL_VAR["'.$loop_id.'"]';
  		}
  		return '$TPL_V'.($depth-1).'["'.$loop_id.'"]';
  	}
  	function _compile_expression($expression, $escape=0, $noinst=0)
  	{
  		if (!strlen($expression)) return 0;
  		$var_state=array(0,'');
  		$par_stack=array();
  		$func_list=array();
  		$this->exp_object =array();
  		$this->exp_error  =array();
  		$this->exp_loopvar=array();
  		$this->_outer_size=array();
  		$number_used=0;
  		$prev_is_operand=0;
  		$prev_is_func=0;
  		$m=array();
  		for ($xpr='',$i=0; strlen($expression); $expression=substr($expression, strlen($m[0])),$i++) {
  			if (!preg_match('/^
  				((?:\.\s*)+)
  				|(?:([A-Z_a-z\x7f-\xff][\w\x7f-\xff]*)\s*(\[|\.|\(|\-\>)?)
  				|(?:(\])\s*(\-\>|\.|\[)?)
  				|((?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+\-]?\d+)?)
  				|((?:"(?:\\\\\\\\|\\\\"|[^"])*")|(?:\'(?:\\\\\\\\|\\\\\'|[^\'])*\'))
  				|(===|!==|\+\+|--|\+\.|<<|>>|<=|>=|==|!=|&&|\|\||[,+\-*\/%&^~|<>()!])
  				|(\s+)
  				|(.+)
  			/ix', $expression, $m)) return 0;
  			if (!empty($m[10])) {
  				return 0;
  			} elseif ($m[1]) {
  				if ($prev_is_operand || $var_state[0]) return 0;
  				$prev_is_operand = 1;
  				$var_state=array(1,preg_replace('/\s+/','',$m[1]));
  			} elseif ($m[2]) {
  				if (empty($m[3])) $m[3]='';
  				switch ($m[3]) {
  				case ''  :
  					switch ($var_state[0]) {
  					case 0:
  						if ($prev_is_operand) return 0;
  						$prev_is_operand = 1;
  						if (in_array(strtolower($m[2]),$this->key_words) || $this->auto_constant && in_array($m[2], $this->constants)) {
  							$xpr.= $m[2];
  						} elseif ($m[2]==='this') {
  							$xpr.= '$this';
  						} elseif ($m[2]==='tpl_') {
  							$xpr.= '$TPL_TPL';
  						} elseif ($m[2][0]==='_') {
  							if ($this->safe_mode) $this->exp_error[]=array(4, $m[2]);
  							$xpr.= in_array($m[2], $this->auto_globals) ? '$'.$m[2] : '$GLOBALS["'.substr($m[2],1).'"]';
  						} else {
  							$xpr.= '$TPL_VAR["'.$m[2].'"]';
  						}
  						break;
  					case 1:
  						$xpr.=$this->_compile_array($var_state[1].$m[2], 'stop');
  						break;
  					case 2:
  						$xpr.= $var_state[1]==='obj' ? $m[2] : '["'.$m[2].'"]';
  						break;
  					}
  					$var_state=array(0,'');
  					break;
  				case '(' :
  					if ($var_state[0]) {
  						if ($var_state[1]!=='obj') return 0;
  					} else {
  						if ($noinst) return 0;
  						$func = strtolower($m[2]);
  						if (in_array($func, $this->func_plugins)) {
  							$func_list[$func] = $this->nl_cnt;
  						} else {
  							if ($this->safe_mode) in_array($func, $this->safe_mode_functions) or $this->exp_error[]=array(5, $m[2]);
  							else in_array($func, $this->all_functions) or $this->exp_error[]=array(7, $m[2]);
  						}
  					}
  					$prev_is_operand=0;
  					$prev_is_func=1;
  					$par_stack[]='f';
  					$var_state=array(0,'');
  					$xpr.=$m[2].'(';
  					break;
  				case '[' :
  					switch ($var_state[0]) {
  					case 0:
  						if ($prev_is_operand) return 0;
  						$xpr.=$this->_compile_array($m[2]).'[';
  						break;
  					case 1:
  						$xpr.=$this->_compile_array($var_state[1].$m[2]).'[';
  						break;
  					case 2:
  						$xpr.= $var_state[1]==='obj' ? $m[2].'[' : '["'.$m[2].'"][';
  						break;
  					}
  					$par_stack[]='[';
  					$prev_is_operand=0;
  					$prev_is_func=0;
  					$var_state=array(0, '');
  					break;
  				case '.' :
  					switch ($var_state[0]) {
  					case 0:
  						if ($prev_is_operand) return 0;
  						$prev_is_operand=1;
  						$var_state=array(1, $m[2].'.');
  						break;
  					case 1:
  						$xpr.=$this->_compile_array($var_state[1].$m[2]);
  						$var_state=array(2, '');
  						break;
  					case 2:
  						$xpr.= $var_state[1]==='obj' ? $m[2] : '["'.$m[2].'"]';
  						break;
  					}
  					break;
  				case '->':
  					switch ($var_state[0]) {
  					case 0:
  						if ($prev_is_operand) return 0;
  						$prev_is_operand = 1;
  						if (in_array($m[2], $this->_loop_stack)) {
  							$xpr .= '$TPL_V'.$this->_loop_info[$m[2]].'->';
  							// need not check safe_mode.
  						} elseif ($m[2]==='this') {
  							if ($this->safe_mode) $this->exp_error[]=array(6, $m[2]);
  							$xpr .= '$this->';
  						} elseif ($m[2][0]==='_') {
  							if ($this->safe_mode) $this->exp_error[]=array(4, $m[2]);
  							$xpr .= '$GLOBALS["'.$m[2].'"]->';
  						} else {
  							$xpr .= '$TPL_VAR["'.$m[2].'"]->';
  						}
  						break;
  					case 1:
  						$xpr.=$this->_compile_array($var_state[1].$m[2], 'obj').'->';
  						break;
  					case 2:
  						$xpr.=($var_state[1]==='obj' ? $m[2] : '["'.$m[2].'"]').'->';
  						break;
  					}
  					$var_state=array(2,'obj');
  					break;
  				}
  			} elseif ($m[4]) {
  				if ($var_state[0] || !$prev_is_operand || empty($par_stack) || array_pop($par_stack)!=='[') return 0;
  				if (empty($m[5])) $m[5]='';
  				switch ($m[5]) {
  				case ''  :
  					$xpr.=']';
  					break;
  				case '->':
  					$xpr.=']->';
  					$var_state=array(2,'obj');
  					break;
  				case '.' :
  					$xpr.=']';
  					$var_state=array(2,'');
  					break;
  				case '[' :
  					$xpr.='][';
  					$par_stack[]='[';
  					$prev_is_operand=0;
  					$prev_is_func=0;
  					break;
  				}
  			} elseif ($m[6]||$m[6]==='0') {
  				if ($prev_is_operand) return 0;
  				$xpr .= $m[6];
  				$prev_is_operand = 1;
  				$number_used = 1;
  			} elseif ($m[7]) {
  				if ($prev_is_operand||preg_match('/ [+\-]$/',$xpr)) return 0;
  				$xpr=preg_replace('/\+$/','.',$xpr) . strtr($m[7],array('``'=>'`', '{`'=>'{', '`}'=>'}', '<?`'=>'<?', '`?>'=>'?>', '<%`'=>'<%', '`%>'=>'%>'));
  				$prev_is_operand = 1;
  			} elseif ($m[8]) {
  				if ($var_state[0]) return 0;
  				switch ($m[8]) {
  				case'++':
  				case'--':
  					return 0;
  				case ',':
  					if (!$prev_is_operand || empty($par_stack) || $par_stack[count($par_stack)-1]!=='f') return 0;
  					$prev_is_operand=0;
  					break;
  				case '(':
  					if ($prev_is_operand) return 0;
  					$par_stack[]='p';
  					break;
  				case ')':
  					if (!$prev_is_operand && !$prev_is_func || empty($par_stack) || array_pop($par_stack)==='[') return 0;
  					$prev_is_operand=1;
  					break;
  				case '!':
  				case '~':
  					if ($prev_is_operand) return 0;
  					break;
  				case '-':
  					if ($prev_is_operand) $prev_is_operand=0;
  					else $m[8]=' -';
  					break;
  				case '+':
  					if (preg_match('/["\']$/', $xpr)) {
  						$m[8]='.';
  						$prev_is_operand=0;
  					} else {
  						if ($prev_is_operand) $prev_is_operand=0;
  						else $m[8]=' +';
  					}
  					break;
  				case '+.':
  					$m[8]='.';
  				default	:
  					if (!$prev_is_operand) return 0;
  					$prev_is_operand=0;
  				}
  				$xpr .= $m[8];
  				$prev_is_func=0;
  			} else {
  				continue;
  			}
  		}
  		if (!empty($par_stack) || !$prev_is_operand || $var_state[0] || $noinst && $i===1 && $number_used) return 0;
  		if ($escape) return 1;
  		if (!empty($this->exp_error)) {
  			foreach ($this->exp_error as $error) {
  				switch ($error[0]) {
  				case 1:
  					$this->report('Error #20', '<b>p.</b> in <b>{'.$this->statement.'}</b> is reserved variable for accessing object plugins',true,true);
  					$this->exit_();
  					break;
  				case 2:
  					$this->report('Error #21', '<b>c.</b> in <b>{'.$this->statement.'}</b> is reserved variable for accessing constants',true,true);
  					$this->exit_();
  					break;
  				case 3:
  					$this->report('Warning #4', 'loop var <b>'.$error[1].'</b> in <b>{'.$this->statement.'}</b> is not in proper loop',true,true);
  					break;
  				case 4:
  					$this->report('Error #22', 'safe mode : global variable <b>'.$error[1].'</b> in <b>{'.$this->statement.'}</b> is not available',true,true);
  					$this->exit_();
  				case 5:
  					$this->report('Error #23', 'safe mode : function <b>'.$error[1].'()</b> in <b>{'.$this->statement.'}</b> is not registered',true,true); 
  					$this->exit_();
  				case 6:
  					$this->report('Error #24', 'safe mode : <b>this-></b> in <b>{'.$this->statement.'}</b> is not available',true,true);
  					$this->exit_();
  				case 7:
  					$this->report('Error #25', 'call to undefined function <b>'.$error[1].'</b> in <b>{'.$this->statement.'}</b>',true,true);
  					$this->exit_();
  				case 8:
  					$this->report('Error #26', 'cannot find plugin file for object <b>'.$error[1].'</b> in <b>{'.$this->statement.'}</b>',true,true);
  					$this->exit_();
  				}
  			}
  			return 0;
  		}
  		foreach ($this->_outer_size as $loop_id=>$depth) {
  			if ($depth===1 && $this->in_div) $this->_size_info[$this->in_div][$loop_id] = 1;
  			if (empty($this->_size_info[$depth][$loop_id])) {
  				$this->_size_info[$depth][$loop_id] = array($this->statement, $this->nl_cnt);
  			}
  		}
  		foreach ($this->exp_loopvar as $depth=>$set) {
  			$this->_loop_info[$depth]['foreach_bit'] |= $set;
  		}
  		if ($func_list) {
  			$this->_set_function($func_list);
  			if ($this->in_div) $this->_set_function($func_list, $this->in_div);
  		}
  		if ($this->exp_object) {
  			$this->_set_class($this->exp_object);
  			if ($this->in_div) $this->_set_class($this->exp_object, $this->in_div);
  		}
  		return $xpr;
  	}
  	function _compile_array($subject, $end='')
  	{
  		if (preg_match('/^\.+/', $subject, $match)) { // ..loop
  			$depth=strlen($match[0]);
  			if ($this->_loop_depth < $depth) {
  				$this->exp_error[]=array(3, $subject);
  				return '';
  			}
  			$id=$this->_loop_stack[$depth-1];
  			$var=substr($subject, $depth);
  			$el='["'.$var.'"]';
  		} else {
  			if ($D=strpos($subject,'.')) { // id.var
  				$id=substr($subject,0,$D);
  				$var=substr($subject,$D+1);
  				$el='["'.$var.'"]';
  				if ($id==='p' || $id==='P') { // p.object
  					if (!$end) {
  						$this->exp_error[]=array(1, $subject);
  						return '';
  					}
  					$obj = strtolower($var);
  					if (in_array($obj, $this->obj_plugins)) {
  						$this->exp_object[$obj] = $this->nl_cnt;
  					} else {
  						$this->exp_error[]=array(8, $subject);
  					}
  					return '$TPL_'.$obj.'_OBJ';
  				} elseif ($id==='c' || $id==='C') { // c.constant
  					if ($end!=='stop') $this->exp_error[]=array(2, $subject);
  					return $var;
  				} elseif (in_array($id, $this->_loop_stack)) { // loop.var
  					$depth=$this->_loop_info[$id];
  				} elseif ($var==='size_') { // outside.size_
  					if ($end!=='stop') $this->exp_error[]=array(-1,$subject);
  					$depth = $this->_loop_depth+1;
  					$this->_outer_size[$id] = $depth;
  					return '$TPL_'.$id.'_'.$depth;
  				} elseif (in_array($var, $this->rsv_words)) { // array.key_ , value_ , index_
  					$this->exp_error[]=array(3, $subject);
  					return '';
  				}
  			} else { // id[
  				$id=$subject;
  				$var='';
  				$el='';
  				if (in_array($id, $this->_loop_stack)) $depth=$this->_loop_info[$id];
  			}
  			if (empty($depth)) { // not loop
  				if ($id[0]==='_') {
  					if ($this->safe_mode) {
  						$this->exp_error[]=array(4, $subject);
  						return 0;
  					}
  					if (in_array($id, $this->auto_globals)) return '$'.$id.$el;
  					return '$GLOBALS["'.substr($id,1).'"]'.$el;
  				}
  				return '$TPL_VAR["'.$id.'"]'.$el;
  			}
  		}
  		switch ($var) {
  		case 'key_':
  			if ($end!=='stop') $this->exp_error[]=array(-1,$subject);
  			elseif (isset($this->exp_loopvar[$depth])) $this->exp_loopvar[$depth] |= 1;
  			else $this->exp_loopvar[$depth] = 1;
  			return '$TPL_K'.$depth;
  		case 'value_':
  			if (isset($this->exp_loopvar[$depth])) $this->exp_loopvar[$depth] |= 2;
  			else $this->exp_loopvar[$depth] = 2;
  			return '$TPL_V'.$depth;
  		case 'index_':
  			if ($end!=='stop') $this->exp_error[]=array(-1,$subject);
  			elseif (isset($this->exp_loopvar[$depth])) $this->exp_loopvar[$depth] |= 4;
  			else $this->exp_loopvar[$depth] = 4;
  			return '$TPL_I'.$depth;
  		case 'size_':
  			if ($end!=='stop') $this->exp_error[]=array(-1,$subject);
  			elseif (isset($this->exp_loopvar[$depth])) $this->exp_loopvar[$depth] |= 8;
  			else $this->exp_loopvar[$depth] = 8;
  			return $id==='*' ? '$TPL_S'.$depth : '$TPL_'.$id.'_'.$depth;
  		default :
  			return '$TPL_V'.$depth.$el;
  		}
  	}
  	function _set_function($func_list, $divname='')
  	{
  		$prev_list=array_keys($this->func_list[$divname]);
  		foreach ($func_list as $func => $line) {
  			if (!in_array($func, $prev_list)) $this->func_list[$divname][$func]=$line;
  		}
  	}
  	function _get_function($divname='')
  	{
  		$include=array();
  		foreach ($this->func_list[$divname] as $func => $line) {
  			$func_name = $this->func_plugins_flip[$func];
  			if (!function_exists($func)) {
  				$func_path=$this->plugin_dir.'/function.'.$func_name.'.php';
  				if (false===include $func_path) {
  					$this->report('Error #27', 'error in plugin <b>'.$func_path.'</b>', true, $line);
  					$this->exit_();
  				} elseif (!function_exists($func)) {
  					$this->report('Error #28', 'cannot find function <b>'.$func.'()</b> in plugin <b>'.$func_path.'</b>', true, $line);
  					$this->exit_();
  				}
  			}
  			$include[]='"'.$func_name.'"';
  		}
  		return $include ? ' $this->include_('.implode(',',$include).');' : '';
  	}
  	function _set_class($obj_list, $divname='')
  	{
  		$prev_list=array_keys($this->obj_list[$divname]);
  		foreach ($obj_list as $obj => $line) {
  			if (!in_array($obj, $prev_list)) $this->obj_list[$divname][$obj] = $line;
  		}
  	}
  	function _get_class($divname='')
  	{
  		$init_obj = '';
  		foreach ($this->obj_list[$divname] as $obj => $line) {
  			$obj_name=$this->obj_plugins_flip[$obj];
  			$class = 'tpl_object_'.$obj_name;
  			if (!class_exists($class)) {
  				$class_path = $this->plugin_dir.'/object.'.$obj_name.'.php';
  				if (false===include $class_path) {
  					$this->report('Error #27', 'error in plugin <b>'.$class_path.'</b>', true, $line);
  					$this->exit_();
  				} elseif (!class_exists($class)) {
  					$this->report('Error #29', 'cannot find class <b>'.$class.'()</b> in plugin <b>'.$class_path.'</b>', true, $line);
  					$this->exit_();
  				}
  			}
  			$init_obj .= '$TPL_'.$obj.'_OBJ=&$this->new_("'.$obj_name.'");';
  		}
  		return $init_obj;
  	}
  	function _filter($source, $type)
  	{
  		$func_split=preg_split('/\s*(?<!\\\\)\|\s*/', trim($this->{$type.'filter'}));
  		$func_sequence=array();
  		for ($i=0,$s=count($func_split); $i<$s; $i++) if ($func_split[$i]) $func_sequence[]=str_replace('\\|', '|', $func_split[$i]);
  		if (!empty($func_sequence)) {
  			for ($i=0,$s=count($func_sequence); $i<$s; $i++) {
  				$func_args=preg_split('/\s*(?<!\\\\)\&\s*/', $func_sequence[$i]);
  				for ($j=1,$k=count($func_args); $j<$k; $j++) {
  					$func_args[$j]=str_replace('\\&', '&', trim($func_args[$j]));
  				}
  				$func = strtolower(array_shift($func_args));
  				$func_name   = $this->{$type.'filters_flip'}[$func];
  				array_unshift($func_args, $source, $this);
  				$func_file = $this->plugin_dir.'/'.$type.'filter.'.$func_name.'.php';
  				if (!in_array($func, $this->{$type.'filters'})) {
  					$this->report('Error #30', 'cannot find '.$type.'filter file <b>'.$func_file.'</b>', true);
  					$this->exit_();
  				}
  				if (!function_exists($func_name)) {
  					if (false===include_once $func_file) {
  						$this->report('Error #31', 'error in '.$type.'filter <b>'.$func_file.'</b>', true);
  						$this->exit_();
  					} elseif (!function_exists($func_name)) {
  						$this->report('Error #32', 'filter function <b>'.$func_name.'()</b> is not found in <b>'.$func_file.'</b>');
  						$this->exit_();
  					}
  				}
  				$source=call_user_func_array($func_name, $func_args);
  			}
  		}
  		return $source;
  	}
  	function report($type, $msg, $file=false, $line=false)
  	{
  		$report = "<br />\n".'<span style="font:12px tahoma,arial;color:#0071DC;background:white">Template_ Compiler '.$type.': '.$msg;
  		if ($file) $report.=' in <b>'.(is_string($file)?$file:$this->tpl_path).'</b>';
  		if ($line) {
  			$line=is_int($line)?$line:$this->nl_cnt;
  			foreach ($this->nl_del as $key=>$val) if ($key<=$line) break;
  			$report.=' on line <b>'.($line+$val).'</b>';
  		}
  		echo $report."</span><br />\n";
  	}
  	function exit_()
  	{
  		// Write code for printing out when compile fails.
  		// e.g. echo "<input type=button value='go back' onClick='history.go(-1)'>";
  		exit;
  	}
  }
  ?>
  
  
  1.1                  siminweb/lib/class.Thumbnail.php
  
  Index: class.Thumbnail.php
  ===================================================================
  <?
  /**********************************************
  * ϸ: class.Thumbnail.php
  *   :  
  *   ¥: 2003-05-29
  * ۼ: ģ
  * 
  ***********************************************/
  
  // XXX: ¿  ϰ ٸ  Ϸ ϰų ϰ ְǴ 
  
  class Thumbnail {
  
  	var $file;
  	var $srcIm;
  	var $dstIm;
  	var $orgX;
  	var $orgY;
  	var $path;
  
  	function Thumbnail($file) {
  		$this->file = $file;
  		if ($file) $this->load($file);
  	}
  
  	function setSavePath($path) {
  		$this->path = $path;
  	}
  
  	function load($fName) { 
  		$_info = getImageSize($fName);
  
  		switch ($_info[2]) {
  			case 1:
  				$im = @ImageCreateFromGIF($fName);
  			break;
  			case 2:
  				$im = @ImageCreateFromJPEG($fName);
  			break;
  			case 3:
  				$im = @ImageCreateFromPNG($fName);
  			break;
  			default:
  				list(,$file_ext) = explode(' ',`file $fname`);
  				$im = @${"ImageCreateFrom".$file_ext}($fName);
  			break;
  		} 
  
  		if (!$im) {
  			$im = ImageCreate(150, 30); 
  			$bgc = ImageColorAllocate($im, 255, 255, 255); 
  			$tc  = ImageColorAllocate($im, 0, 0, 0); 
  			ImageFilledRectangle($im, 0, 0, 150, 30, $bgc); 
  			ImageString($im, 1, 5, 5, "Error loading $fName", $tc); 
  		} 
  		$this->srcIm = $im;
  		$this->orgX = $_info[0];
  		$this->orgY = $_info[1];
  		return $im; 
  	}
  
  	function _process($width="",$height="") {
  		if($this->orgX <= $width) {
  			$width = $this->orgX;
  			$height = $this->orgY;
  		}
  
  		if($this->orgX > $width){
  			$height = ceil(($width / $this->orgX) * $this->orgY);
  		}
  
  		$this->dstIm = ImageCreateTruecolor($width,$height);     // ̹ 
  		ImageColorAllocate($this->dstIm, 255, 255, 255);
  		ImageCopyResampled($this->dstIm, $this->srcIm, 0, 0, 0, 0, $width, $height, ImageSX($this->srcIm),ImageSY($this->srcIm));
  		return $this->dstIm; 
  	}
  
  	function thumbJPEG($width="", $height="",$newfile="#undefined") {
  		if ($newfile == "#undefined") {
  			imageJPEG($this->_process($width,$height));
  		} else {
  			header('Content-type: image/jpeg');
  			imageJPEG($this->_process($width,$height),$newfile);
  			return $newfile;
  		}
  	}
  
  	function thumbGIF($width="", $height="",$newfile="#undefined") {
  		if ($newfile == "#undefined") {
  			imageGIF($this->_process($width,$height));
  		} else {
  			header('Content-type: image/gif');
  			imageGIF($this->_process($width,$height),$newfile);
  			return $newfile;
  		}
  	}
  
  	function thumbPNG($width="", $height="",$newfile="#undefined") {
  		if ($newfile == "#undefined") {
  			imagePNG($this->_process($width,$height));
  		} else {
  			header('Content-type: image/png');
  			imagePNG($this->_process($width,$height),$newfile);
  			return $newfile;
  		}
  	}
  }
  
  
  ?>
  
  
  1.1                  siminweb/lib/class.WebApp.php
  
  Index: class.WebApp.php
  ===================================================================
  <?
  /**********************************************
  * 파일명: class.WebApp.php
  * 설  명: 웹어플리케이션 수퍼클래스
  * 날  짜: 2003-04-08
  * 작성자: 거친마루
  * 2003-10-07 싱글톤 추가
  * 2003-10-15 confirm 메소드 추가
  * 2004-01-14 getConf를 멀티호스트용으로 개선,
  *            config 의 scope를 조정하여 local 또는 글로벌 설정을 가져올수 있음
  * 2004-08-03 call(), get() 메소드 추가
  *            WebApp_Message 클래스 추가
  ***********************************************/
  
  class WebApp {
  
  	/**
  	* WebAp::import()
  	* 동적으로 모듈을 로드한다.
  	* 
  	* @param string $module : 모듈명 (class.모듈명.php 에서 모듈명부분만)
  	* @return true
  	*/
  	function import($module) {
  		if (strpos($module,'/')) {
  			$_part = explode('.',$module);
  			$module = array_pop($_part);
  			$path = implode('/',$_part)."/";
  		}
  		$file = $path."class.$module.php";
  		require_once($file);
  		return true;
  	}
  
  	/**
  	* Webapp::init()
  	* 동적으로 모듈을 로드 후 인스턴스를 생성한다.
  	*
  	* @param string $module : 모듈명 (class.모듈명.php 에서 모듈명부분만)
  	* @param [mixed $param[, mixed $param[, mixed $param...]]]
  	* @return object
  	* @deprecated
  	*/
  	function init($module) {
  		$o = &WebApp::singleton($module);
  		return $o;
  	}
  
  	/**
  	* WebApp::getConf() 
  	* 웹 어플리케이션 설정을 얻어옵니다.
  	* 다중array의 값일경우 dot 연산자로 구분하여 가져올 수 있습니다 ex) WebApp::getConf('board.rownum');
  	* 
  	* @param string $key
  	* @return mixed
  	*/
  	function getConf($key="") {
  		global $CONF;
  		if (!$key) return @parse_ini_file("conf/global.conf.php",true);
  		if(strpos($key, ".") > -1) {
  			$t = explode(".", $key);
  			$v = $CONF;
  			for($z=0,$c=count($t); $z<$c; $z++) {
  				$v = $v[$t[$z]];
  				if (!$v) {
  					$CONF[$t[$z]] = @parse_ini_file('conf/'.$t[$z].'.conf.php',true);
  					$v = $CONF[$t[$z]];
  				}
  			}
  			return $v;
  		} else {
  			return $CONF[$key];
  		}
  	}
  
  	// 개발중
  	function setConf($key,$value='') {
  	}
  
  	/**
  	* WebApp::mapPath()
  	* 경로를 현재 경로 또는 웹루트 경로와 매핑 시켜줌
  	* 
  	* @param string $path
  	* @return string
  	* @see asp에서 Server.mappath() 메소드
  	*/
  	function mapPath($path) {
  		if (!defined('__PATH__')) define(__PATH__,getenv('SCRIPT_FILENAME'));
  		if (strtolower(substr($path,0,7)) == 'http://') return $path;
  		$aPath = explode('/',($path[0] == '/') ? getenv('DOCUMENT_ROOT') : dirname(__PATH__));
  		$newPath = explode('/',$path);
  		for ($i=0,$cnt=count($newPath); $i<$cnt; $i++) {
  			if ($newPath[$i] == '..') {
  				if (count($aPath)>1) array_pop($aPath);
  			} elseif ($newPath[$i] == '' || $newPath[$i] == '.') {
  				//forget it
  			} else {
  				$aPath[] = $newPath[$i];
  			}
  		}
  		return implode('/',$aPath);
  	}
  
  	/**
  	* WebApp::getTemplate()
  	* 템플릿 경로를 리턴한다. (테마, 스킨 반영)
  	* 
  	* @param string $filename
  	* @return string
  	*/
  	function getTemplate($filename) {
  		$tpl_order = array(
  			'skin/'._SKIN.'/'.$filename,
  			'theme/'._THEME.'/'.$filename,
  			'html/'.$filename
  		);
  
  		for ($i=0,$cnt=count($tpl_order); $i<$cnt;$i++) {
  			$template = $tpl_order[$i];
  			if (!is_file($template)) continue;
  			return $template;
  			break;
  		}
  	}
  
  	/**
  	* WebApp::singleton()
  	* 오브젝트 저장소
  	* 
  	* @param string $name [,extra params..]
  	* @return object ref
  	*/
  	function &singleton($name) {
  		static $jar;
  		if (!is_array($jar)) $jar = array();
  		if (is_object($jar[$name])) {
  			return $jar[$name];
  		} else {
  			WebApp::import($name);
  			$argv = func_get_args();
  			unset($argv[0]);
  			$jar[$name] = new $name;
  			if (is_array($argv) && count($argv)) call_user_func_array(array(&$jar[$name], $name), $argv);
  			return $jar[$name];
  		}
  	}
  
  	/**
  	* WebApp::call()
  	* 특정 모듈을 호출한다
  	* 
  	* @param string $module  모듈별명(도트구분)
  	* @param dict $param     파라미터(key값을가진 array)
  	*/
  	function call($module,$param) {
  		$RUN_MODE = WEBAPP_RUNMODE_FUNCTION;
  
  		$_apppath = explode('.',$module);
  		$__PATH = 'module';
  		foreach ($_apppath as $_path) {
  			$__PATH.= $_path."/";
  			$_init = $__PATH."__init__.php";
  			if (is_file($_init)) include $_init;
  			/*
  			$_conf = $path."page.conf.php";
  			if (is_file($_conf)) {
  				$_cfg = @parse_ini_file($_conf,true);
  				if ($_cfg['layout']) $ch = $_cfg['layout'];
  				@extract($_cfg['phpvars']);
  			}
  			*/
  		}
  
  		$path = 'module/'.str_replace('.','/',$module).'.php';
  		if (is_file($path)) {
  			include $path;
  		} else {
  			$parts = explode('.',$module);
  			$__METHOD = array_pop($parts);
  			$path = 'module/'.implode('/',$parts).'/__call.php';
  			include $path;
  		}
  	}
  
  	/**
  	* WebApp::get()
  	* 특정 모듈에서 값을 받아온다
  	* 
  	* @param string $module  모듈별명(도트구분)
  	* @param string $param    가져올 값의 이름
  	*/
  	function get($module,$param) {
  		$path = 'module/'.str_replace('.','/',$module).'/__get.php';
  		return include $path;
  	}
  
  	/**
  	* WebApp::set()
  	* 특정 모듈에 값을 대입한다.
  	* 
  	* @param string $module  모듈별명(도트구분)
  	* @param string $param   대입할 값의 이름
  	* @param mixed  $data    대입할 값의 데이타
  	*/
  	function set($module,$param,$data) {
  		$path = 'module/'.str_replace('.','/',$module).'/__set.php';
  		return include $path;
  	}
  
  	//==--------------------------------------------------------------==//
  	//==-- 에러 핸들러
  	//==--------------------------------------------------------------==//
  
  	function raiseError($errstr, $errtype=E_USER_WARNING) {
  		trigger_error($errstr,$errtype);
  	}
  
  	function showError($errno, $errstr, $errfile, $errline, $errcontext) {
  		switch ($errno) {
  			case E_USER_WARNING: case E_USER_NOTICE:
  				echo "<b>에라</b> $errstr $errfile 파일 $errline 번째 라인에서<br>";
  				break;
  			default:
  				// skip other errors
  		}
  	}
  
  	function showErrors() {
  	}
  
  	//==--------------------------------------------------------------==//
  	//==-- 경고창 출력, 페이지 이동 관련
  	//==--------------------------------------------------------------==//
  
  	/**
  	* WebApp::alert()
  	* 자바스크립트 경고창을 출력한다.
  	* 
  	* @param string $msg  경고창으로 출력할 메시지
  	*/
  	function alert($msg) {
  		$msg = str_replace(array("\n","'"),array("\\n","\'"),$msg);
  		echo "<script>alert('$msg');</script>";
  	}
  
  	/**
  	* WebApp::confirm()
  	* 자바스크립트 선택창을 출력후 사용자의 결정에 따라 다른 url로 보내준다
  	* 
  	* @param string $msg  메시지
  	* @param string $yes  사용자가 '확인' 버튼을 눌렀을때 이동할 url
  	* @param string $no   사용자가 '취소' 버튼을 눌렀을때 이동할 url
  	*/
  	function confirm($msg,$yes,$no) {
  		$msg = str_replace(array("\n","'"),array("\\n","\""),$msg);
  		echo "<script>navigate(confirm('$msg') ? '$yes' : '$no');</script>";
  		exit;
  	}
  
  	/**
  	* WebApp::redirect()
  	* 해당 페이지로 이동한다
  	* 
  	* @param string $url  이동할 페이지
  	* @param string $msg  경고창으로 출력할 메시지
  	*/
  	function redirect($url,$msg="") {
  		if ($msg) WebApp::alert($msg);
  //		$url = urlencode($url);
  		echo "<script>document.location.replace('$url');</script>";
  		exit;
  	}
  
  	/**
  	* WebApp::moveBack()
  	* 히스토리 바로 이전으로 이동한다
  	* 
  	* @param string $msg  경고창으로 출력할 메시지
  	*/
  	function moveBack($msg="") {
  		if ($msg) WebApp::alert($msg);
  		echo "<script>history.back();</script>";
  		exit;
  	}
  
  	/**
  	* WebApp::halt()
  	* 프로그램을 종료한다.
  	* 
  	* @param string $msg  경고창으로 출력할 메시지
  	*/
  	function halt($msg='') {
  		if ($msg) WebApp::alert($msg);
  		exit;
  	}
  
  	/**
  	* WebApp::closeWin()
  	* 현재 창을 닫는다
  	* 
  	* @param boolean $flag 부모창을 리프레시 할것인가
  	*/
  	function closeWin($flag) {
  		if ($flag) echo "<script>opener.location.reload();</script>";
  		echo "<script>self.close();</script>";
  		exit;
  	}
  }
  
  /**
  * WebApp_Message
  * 
  * 
  */
  class WebApp_Message {
  	var $header;
  	var $body;
  
  	function WebApp_Message($header=null,$body=null) {
  		if ($header != null) $this->header = $header;
  		else $this->header = array();
  
  		if ($body != null) $this->body = $body;
  	}
  
  	function setHeader($key,$value=null) {
  		if (is_array($key) && $value == null) {
  			$this->header = $key;
  		} else {
  			$this->header[$key] = $value;
  		}
  	}
  
  	function setBody($body) {
  		$this->body = $body;
  	}
  
  	function __toString() {
  		return (string)$this->body;
  	}
  }
  ?>
  
  
  
  1.1                  siminweb/lib/tmp.image_alpha.php
  
  Index: tmp.image_alpha.php
  ===================================================================
  <?
  function _image_alpha($im, $opacity=50)
  {
          if (!$w) $w=imagesx($im); else if (imagesx($im) < $w) $w=imagesx($im);
          if (!$h) $h=imagesy($im); else if (imagesy($im) < $h) $h=imagesy($im);
  
          $opacity=100-$opacity;
          $opacity/=100;
  
          $new_image=imagecreatetruecolor($w, $h);
          imagecolorallocate($new_image, 255, 255, 255);
          imagealphablending($new_image, false);
  
          $lenx=min(imagesx($im), $w);
          $leny=min(imagesy($im), $h);
  
          for ($p=0; $p < $lenx; $p++)
          {
                  for ($i=0; $i < $leny; $i++)
                  {
                          $old_color=imagecolorat($im, $p, $i);
                          $color=imagecolorsforindex($im, $old_color);
                          $alpha=$color['alpha']+round((127-$color['alpha'])*$opacity);
                          $new_color=imagecolorallocatealpha($new_image, $color['red'], $color['green'], $color['blue'], $alpha);
                          imagesetpixel($new_image, $p, $i, $new_color);
                  }
          }
          return $new_image;
  }
  
  function _image_gray($im)
  {
          if (!$w) $w=imagesx($im); else if (imagesx($im) < $w) $w=imagesx($im);
          if (!$h) $h=imagesy($im); else if (imagesy($im) < $h) $h=imagesy($im);
  
          $new_image=imagecreatetruecolor($w, $h);
          imagecolorallocate($new_image, 255, 255, 255);
          imagealphablending($new_image, false);
          $lenx=min(imagesx($im), $w);
          $leny=min(imagesy($im), $h);
  
          for ($p=0; $p < $lenx; $p++)
          {
                  for ($i=0; $i < $leny; $i++)
                  {
                          $old_color=imagecolorat($im, $p, $i);
                          $color=imagecolorsforindex($im, $old_color);
                          $colors=round(($color['red']+$color['green']+$color['blue'])/3);
                          $new_color=imagecolorallocatealpha($new_image, $colors, $colors, $colors, $color['alpha']);
                          imagesetpixel($new_image, $p, $i, $new_color);
                  }
          }
          return $new_image;
  }
  ?>
  
  
  
  1.1                  siminweb/lib/wrapper.WebApp.php
  
  Index: wrapper.WebApp.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * ϸ: lib/wrapper.WebApp.php
  * ۼ: 2004-09-19
  * ۼ: ģ
  *   : webapp stream wrapper
  *****************************************************************
  * 
  */
  
  class Stream_WebApp
  {
  	var $module;
  	var $variable;
  	var $contents;
  	var $position;
  	var $stream_is_object = false;
  
  	function stream_open($path, $mode, $option, &$opened_path)
  	{
  		$url = parse_url($path);
  		$this->module = $url['host'];
  		$this->variable = $url['path'];
  		$this->position = 0;
  
  		if (true === strpos('r',$mode)) {
  			if (!is_file('module/'.str_replace('.','/',$this->module).'/__get.php')) return false;
  		}
  		if (true === strpos('w',$mode)) {
  			if (!is_file('module/'.str_replace('.','/',$this->module).'/__set.php')) return false;
  		}
  		return true;
  	}
  
  	function stream_read($length)
  	{
  		if (!$this->contents) $this->_get_contents();
  		if (!$this->stream_is_object) {
  			$ret = substr($this->contents, $this->position, $length);
  			$this->position += strlen($ret);
  			return $ret;
  		} else {
  		}
  	}
  
  
  	// TODO: data string  ƴҰ쿡 toString()  position ó
  	function stream_write($data)
  	{
  		if (!$this->contents) $this->_get_contents();
  		if (!$this->stream_is_object) {
  			$left = substr($this->contents, 0, $this->position);
  			$right = substr($this->contents, $this->position + strlen($data));
  			$new_contents = $left.$data.$right;
  			$this->position += strlen($data);
  			return strlen($data);
  		} else {
  			// TODO: object marshall ó
  		}
  	}
  
  	function stream_tell()
  	{
  		return $this->position;
  	}
  
  
  	function stream_eof()
  	{
  		return $this->position >= strlen($this->contents);
  	}
  
  	function stream_seek($offset, $whence)
  	{
  		switch ($whence) {
  			case SEEK_SET:
  				if ($offset < strlen($this->contents) && $offset >= 0) {
  					$this->position = $offset;
  					return true;
  				} else{
  					return false;
  				}
  				break;
  			case SEEK_CUR:
  				if ($offset >= 0) {
  					$this->position += $offset;
  					return true;
  				} else {
  					return false;
  				}
  				break;
  			case SEEK_END:
  				if (strlen($this->contents) + $offset >= 0) {
  					$this->position = strlen($this->contents) + $offset;
  					return true;
  				} else {
  					return false;
  				}
  				break;
  			default:
  				return false;
  		}
  	}
  
  	function _get_contents()
  	{
  		$this->contents = WebApp::get($this->module,$this->variable);
  		if (!is_string($this->contents)) {
  			$this->contents = serialize($this->contents);
  			$this->stream_is_object = true;
  		}
  		return $this->contents;
  	}
  
  	function _get_legnth()
  	{
  	}
  }
  
  stream_wrapper_register('webapp','Stream_WebApp') or return WebApp::Error('Failed to register webapp:// protocol');
  ?>
  
  


comfuture    04/11/24 21:25:19

  Added:       module/admin __init__.php login.php logout.php main.php
                        menu.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/admin/__init__.php
  
  Index: __init__.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/__init__.php
  * 작성일: 2004-10-29
  * 작성자: 거친마루
  * 설  명: 관리자 init
  *****************************************************************
  * 
  */
  
  if ($act != 'admin.login' && !$_SESSION['admin']) {
  	WebApp::redirect($URL->setVar(array(
  		'redir' => urlencode($QUERY_STRING),
  		'act' => 'admin.login'
  	)));
  }
  ?>
  
  
  1.1                  siminweb/module/admin/login.php
  
  Index: login.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/login.php
  * 작성일: 2004-10-29
  * 작성자: 거친마루
  * 설  명: 관리자 로그인
  *****************************************************************
  * 
  */
  
  switch (REQUEST_METHOD) {
  	case 'GET':
  		$tpl->setLayout('default');
  		$tpl->define('CONTENT', WebApp::getTemplate('admin/login.htm'));
  		break;
  	case 'POST':
  		if ($_POST['admin_pass'] == WebApp::getConf('admin.pass')) {
  			$_SESSION['admin'] = true;
  			WebApp::redirect('?'.urldecode($_GET['redir']));
  		}  else {
  			WebApp::moveBack('비밀번호가 올바르지 않습니다');
  		}
  		break;
  }
  ?>
  
  
  1.1                  siminweb/module/admin/logout.php
  
  Index: logout.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/login.php
  * 작성일: 2004-10-29
  * 작성자: 거친마루
  * 설  명: 관리자 로그인
  *****************************************************************
  * 
  */
  
  $_SESSION['admin'] = false;
  WebApp::redirect('?main','top');
  ?>
  
  
  1.1                  siminweb/module/admin/main.php
  
  Index: main.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/main.php
  * 작성일: 2004-10-29
  * 작성자: 거친마루
  * 설  명: 관리자 페이지 메인
  *****************************************************************
  * 
  */
  
  if (!$_SESSION['admin']) {
  	WebApp::redirect($URL->setVar(array(
  		'redir' => urlencode($QUERY_STRING),
  		'act' => 'admin.login'
  	)));
  }
  
  $tpl->setLayout('blank');
  $tpl->define('CONTENT', WebApp::getTemplate('admin/main.htm'));
  ?>
  
  
  1.1                  siminweb/module/admin/menu.php
  
  Index: menu.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/admin/menu.php
  * 작성일: 2004-10-31
  * 작성자: 거친마루
  * 설  명: 관리자 메뉴
  *****************************************************************
  * 
  */
  
  $tpl->define('CONTENT', WebApp::getTemplate('admin/menu.htm'));
  
  ?>
  
  


comfuture    04/11/24 21:25:19

  Added:       module/doc __init__.php view.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/doc/__init__.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/doc/view.php
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:19

  Added:       module/doc/admin __init__.php edit.php list.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/doc/admin/__init__.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/doc/admin/edit.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/doc/admin/list.php
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:19

  Added:       module/game __init__.php lobby.php room.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/game/__init__.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/game/lobby.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/game/room.php
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       module/member __init__.php confirm.php join.php login.php
                        logout.php modify.php part.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/member/__init__.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/confirm.php
  
  Index: confirm.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * ϸ: module/member/confirm.php
  * ۼ: 2004-10-26
  * ۼ: ģ
  *   :  Ȯ ޽
  *****************************************************************
  * 
  */
  
  ?>
  
  
  1.1                  siminweb/module/member/join.php
  
  Index: join.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/member/join.php
  * 작성일: 2004-10-26
  * 작성자: 거친마루
  * 설  명: 회원가입
  *****************************************************************
  * 
  */
  
  switch (REQUEST_METHOD) {
  	case 'GET':
  		$tpl->setLayout('main');
  		$tpl->define('CONTENT',WebApp::getTemplate('member/join.htm'));
  		break;
  	case 'POST':
  		$DB = &WebApp::singleton('DB');
  
  		$user = $_POST['user'];
  		$pass = md5($_POST['pass']);
  		$name = $_POST['name'];
  		$email = $_POST['email'];
  		$reg_date = date('Y-m-d H:i:s');
  
  		$sql = "
  			INSERT INTO	simin_user
  				(user, pass, name, email, reg_date)
  			VALUES
  				('$user','$pass','$name','$email','$reg_date')
  		";
  
  		if ($DB->query($sql)) {
  			//require_once "Mail.php";
  			// 메일발송
  
  			WebApp::redirect($URL->setVar(
  				array(
  					'act' => 'member.confirm',
  					'uniqid' => $uniqid
  				)
  			));
  		} else {
  			WebApp::moveBack('회원 가입에 실패하였습니다'.$DB->error);
  		}
  		break;
  }
  ?>
  
  
  1.1                  siminweb/module/member/login.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/logout.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/modify.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/part.php
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       module/member/admin __init__.php add.php delete.php list.php
                        modify.php withdraw.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/member/admin/__init__.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/admin/add.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/admin/delete.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/admin/list.php
  
  Index: list.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/member/admin/view.php
  * 작성일: 2004-10-26
  * 작성자: 거친마루
  * 설  명: 회원 목록 보기
  *****************************************************************
  * 
  */
  
  // {{{ Configure
  $listnum = 10;
  $navnum = 10;
  // }}}
  
  $page = $_GET['page'];
  if (!$page) $page = 1;
  $seek = $listnum * ($page - 1);
  
  $DB = &WebApp::singleton('DB');
  
  $total = $DB->sqlFetchOne("
  	SELECT
  		COUNT(*)
  	FROM
  		simin_user
  ");
  
  $data = $DB->sqlFetchAll("
  	SELECT
  		user, name, email, reg_date
  	FROM
  		simin_user
  	ORDER BY
  		reg_date DESC
  	LIMIT
  		$seek, $listnum
  ");
  
  @array_walk($data,'cb_format_list');
  $tpl->define('CONTENT',WebApp::getTemplate('member/admin/list.htm'));
  $tpl->assign('total',$total);
  $tpl->assign('list',$data);
  
  // {{{ Functions
  function cb_format_list(&$arr) {
  	$arr['int_date'] = strtotime($arr['reg_date']);
  }
  // }}}
  ?>
  
  
  1.1                  siminweb/module/member/admin/modify.php
  
  	<<Binary file>>
  
  
  1.1                  siminweb/module/member/admin/withdraw.php
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       module/news/admin list.php write.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/news/admin/list.php
  
  Index: list.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/member/admin/view.php
  * 작성일: 2004-10-31
  * 작성자: 거친마루
  * 설  명: 뉴스 목록보기
  *****************************************************************
  * 
  */
  
  // {{{ Configure
  $listnum = 10;
  $navnum = 10;
  // }}}
  
  $page = $_GET['page'];
  if (!$page) $page = 1;
  $seek = $listnum * ($page - 1);
  
  $DB = &WebApp::singleton('DB');
  
  $total = $DB->sqlFetchOne("
  	SELECT
  		COUNT(*)
  	FROM
  		simin_news
  ");
  
  $data = $DB->sqlFetchAll("
  	SELECT
  		idx, title, reg_date
  	FROM
  		simin_news
  	ORDER BY
  		reg_date DESC
  	LIMIT
  		$seek, $listnum
  ");
  
  @array_walk($data,'cb_format_list');
  $tpl->define('CONTENT',WebApp::getTemplate('news/admin/list.htm'));
  $tpl->assign('total',$total);
  $tpl->assign('list',$data);
  
  // {{{ Functions
  function cb_format_list(&$arr) {
  	global $total, $seek;
  	static $num;
  	$arr['num'] = $total - $seek - $num++;
  	$arr['int_date'] = strtotime($arr['reg_date']);
  }
  // }}}
  ?>
  
  
  1.1                  siminweb/module/news/admin/write.php
  
  Index: write.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * ϸ: module/news/admin/write.php
  * ۼ: 2004-10-31
  * ۼ: ģ
  *   :  ۼ
  *****************************************************************
  * 
  */
  
  switch (REQUEST_METHOD) {
  	case 'GET':
  		$tpl->define('CONTENT', WebApp::getTemplate('news/admin/write.htm'));
  		break;
  	case 'POST':
  		$subject = $_POST['subject'];
  		$title = $_POST['title'];
  		$content = $_POST['content'];
  		$name = $_POST['name'];
  		$reg_date = date('Y-m-d H:i:s');
  
  		$DB = &WebApp::singleton('DB');
  		$sql = "
  			INSERT INTO simin_news
  				(subject, title, content, name, reg_date)
  			VALUES
  				('$subject','$title','$content','$name','$reg_date')
  		";
  		if ($DB->query($sql)) {
  			WebApp::redirect($URL->setVar('act','news.admin.list'));
  		} else {
  			WebApp::moveBack(' ۼ ߽ϴ');
  		}
  		break;
  }
  
  ?>
  
  


comfuture    04/11/24 21:25:20

  Added:       module/news read.php
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/module/news/read.php
  
  Index: read.php
  ===================================================================
  <?php
  /* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  /**
  * 파일명: module/news/read.php
  * 작성일: 2004-10-31
  * 작성자: 거친마루
  * 설  명: 뉴스 보기
  *****************************************************************
  * 
  */
  
  $id = $_GET['id'];
  
  $DB = &WebApp::singleton('DB');
  $sql = "
  	SELECT
  		*
  	FROM
  		simin_news
  	WHERE
  		idx={$id}
  ";
  $data = $DB->sqlFetch($sql);
  
  $tpl->setLayout('main');
  $tpl->define('CONTENT', WebApp::getTemplate('news/read.htm'));
  $tpl->assign($data);
  ?>
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_aspnet/FredCK.FCKeditorV2 AssemblyInfo.cs
                        FCKeditor.cs FCKeditorConfigurations.cs
                        FCKeditorDesigner.cs FileBrowserConnector.cs
                        FredCK.FCKeditorV2.FxCop FredCK.FCKeditorV2.csproj
                        FredCK.FCKeditorV2.csproj.user
                        FredCK.FCKeditorV2.snk XmlUtil.cs
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/AssemblyInfo.cs
  
  Index: AssemblyInfo.cs
  ===================================================================
  using System.Reflection;
  using System.Runtime.CompilerServices;
  using System.Security.Permissions ;
  using System.Web.UI ;
  
  [assembly:TagPrefix("FredCK.FCKeditorV2", "FCKeditorV2")]
  
  [assembly:System.CLSCompliant(true)]
  [assembly:System.Runtime.InteropServices.ComVisible(false)]
  
  //
  // General Information about an assembly is controlled through the following 
  // set of attributes. Change these attribute values to modify the information
  // associated with an assembly.
  //
  [assembly: AssemblyTitle("")]
  [assembly: AssemblyDescription("")]
  [assembly: AssemblyConfiguration("")]
  [assembly: AssemblyCompany("")]
  [assembly: AssemblyProduct("")]
  [assembly: AssemblyCopyright("")]
  [assembly: AssemblyTrademark("")]
  [assembly: AssemblyCulture("")]		
  
  //
  // Version information for an assembly consists of the following four values:
  //
  //      Major Version
  //      Minor Version 
  //      Build Number
  //      Revision
  //
  // You can specify all the values or you can default the Revision and Build Numbers 
  // by using the '*' as shown below:
  
  [assembly: AssemblyVersion("1.0.*")]
  
  //
  // In order to sign your assembly you must specify a key to use. Refer to the 
  // Microsoft .NET Framework documentation for more information on assembly signing.
  //
  // Use the attributes below to control which key is used for signing. 
  //
  // Notes: 
  //   (*) If no key is specified, the assembly is not signed.
  //   (*) KeyName refers to a key that has been installed in the Crypto Service
  //       Provider (CSP) on your machine. KeyFile refers to a file which contains
  //       a key.
  //   (*) If the KeyFile and the KeyName values are both specified, the 
  //       following processing occurs:
  //       (1) If the KeyName can be found in the CSP, that key is used.
  //       (2) If the KeyName does not exist and the KeyFile does exist, the key 
  //           in the KeyFile is installed into the CSP and used.
  //   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
  //       When specifying the KeyFile, the location of the KeyFile should be
  //       relative to the project output directory which is
  //       %Project Directory%\obj\<configuration>. For example, if your KeyFile is
  //       located in the project directory, you would specify the AssemblyKeyFile 
  //       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
  //   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
  //       documentation for more information on this.
  //
  [assembly: AssemblyDelaySign(false)]
  [assembly: AssemblyKeyFile(@"..\..\FredCK.FCKeditorV2.snk")]
  [assembly: AssemblyKeyName("")]
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FCKeditor.cs
  
  Index: FCKeditor.cs
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: FCKeditor.cs
   * 	This is the FCKeditor Asp.Net control.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:17:23
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  using System ;
  using System.Web.UI ;
  using System.Web.UI.WebControls ;
  using System.ComponentModel ;
  using System.Text.RegularExpressions ;
  using System.Globalization ;
  using System.Security.Permissions ;
  
  namespace FredCK.FCKeditorV2
  {
  //	[ System.Web.AspNetHostingPermission(SecurityAction.LinkDemand) ]
  	[ DefaultProperty("Value") ]
  	[ ValidationProperty("Value") ]
  	[ ToolboxData("<{0}:FCKeditor runat=server></{0}:FCKeditor>") ]
  	[ Designer("FredCK.FCKeditorV2.FCKeditorDesigner") ]
  	[ ParseChildren(false) ]
  	public class FCKeditor : System.Web.UI.Control, IPostBackDataHandler
  	{
  		private FCKeditorConfigurations oConfig ;
  
  		public FCKeditor()
  		{
  			oConfig = new FCKeditorConfigurations() ;
  		}
  
  		[ Browsable( false ) ]
  		public FCKeditorConfigurations Config
  		{
  			get { return oConfig ; }
  		}
  
  		[ DefaultValue( "" ) ]
  		public string Value
  		{
  			get { return (string)IsNull( ViewState["Value"], "" ) ; }
  			set { ViewState["Value"] = value ; }
  		}
  
  		[ DefaultValue( "/FCKeditor/" ) ]
  		public string BasePath
  		{
  			get { return (string)IsNull( ViewState["BasePath"], "" ) ; }
  			set { ViewState["BasePath"] = value ; }
  		}
  
  		[ DefaultValue( "Default" ) ]
  		public string ToolbarSet
  		{
  			get { return (string)IsNull( ViewState["ToolbarSet"], "Default" ) ; }
  			set { ViewState["ToolbarSet"] = value ; }
  		}
  
  		[ Category( "Appearence" ) ]
  		[ DefaultValue( "100%" ) ]
  		public Unit Width
  		{
  			get { return (Unit)IsNull( ViewState["Width"], Unit.Parse("100%", CultureInfo.InvariantCulture) ) ; }
  			set { ViewState["Width"] = value ; }
  		}
  
  		[ Category("Appearence") ]
  		[ DefaultValue( "200px" ) ]
  		public Unit Height
  		{
  			get { return (Unit)IsNull( ViewState["Height"], Unit.Parse("200px", CultureInfo.InvariantCulture) ) ; }
  			set { ViewState["Height"] = value ; }
  		}
  
  		public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
  		{
  			if (postCollection[postDataKey] != Value)
  			{
  				Value = postCollection[postDataKey];
  				return true;
  			}
  			return false;
  		}
  
  		public bool CheckBrowserCompatibility()
  		{
  			System.Web.HttpBrowserCapabilities oBrowser = Page.Request.Browser ;
  
  			// Internet Explorer 5.5+ for Windows
  			if (oBrowser.Browser == "IE" && ( oBrowser.MajorVersion >= 6 || ( oBrowser.MajorVersion == 5 && oBrowser.MinorVersion >= 5 ) ) && oBrowser.Win32)
  				return true ;
  			else
  			{
  				Match oMatch = Regex.Match( this.Page.Request.UserAgent, @"(?<=Gecko/)\d{8}" ) ;
  				return ( oMatch.Success && int.Parse( oMatch.Value, CultureInfo.InvariantCulture ) >= 20030210 ) ;
  			}
  		}
  
  		protected override void Render(HtmlTextWriter writer)
  		{
  			writer.Write( "<div>" ) ;
  
  			if ( this.CheckBrowserCompatibility() )
  			{
  				string sLink = this.BasePath + "editor/fckeditor.html?InstanceName=" + this.UniqueID ;
  				if ( this.ToolbarSet.Length > 0 ) sLink += "&Toolbar=" + this.ToolbarSet ;
  
  				// Render the linked hidden field.
  				writer.Write( 
  					"<input type=\"hidden\" id=\"{0}\" name=\"{0}\" value=\"{1}\">",
  						this.UniqueID,
  						System.Web.HttpUtility.HtmlEncode( this.Value ) ) ;
  
  				// Render the configurations hidden field.
  				writer.Write( 
  					"<input type=\"hidden\" id=\"{0}___Config\" value=\"{1}\">",
  						this.UniqueID,
  						this.Config.GetHiddenFieldString() ) ;
  
  				// Render the editor IFRAME.
  				writer.Write(
  					"<iframe id=\"{0}___Frame\" src=\"{1}\" width=\"{2}\" height=\"{3}\" frameborder=\"no\" scrolling=\"no\"></iframe>",
  						this.UniqueID,
  						sLink,
  						this.Width,
  						this.Height ) ;
  			}
  			else
  			{
  				writer.Write(
  					"<textarea name=\"{0}\" rows=\"4\" cols=\"40\" style=\"width: {1}; height: {2}\" wrap=\"virtual\">{3}</textarea>",
  						this.UniqueID,
  						this.Width,
  						this.Height,
  						System.Web.HttpUtility.HtmlEncode( this.Value ) ) ;
  			}
  
  			writer.Write( "</div>" ) ;
  		}
  
  		public void RaisePostDataChangedEvent()
  		{
  			// Do nothing
  		}
  
  		private object IsNull( object valueToCheck, object replacementValue )
  		{
  			return valueToCheck == null ? replacementValue : valueToCheck ;
  		}
  	}
  }
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FCKeditorConfigurations.cs
  
  Index: FCKeditorConfigurations.cs
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: FCKeditorConfigurations.cs
   * 	Class that holds all editor configurations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:17:23
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  using System ;
  using System.Collections ;
  
  namespace FredCK.FCKeditorV2
  {
  	public class FCKeditorConfigurations
  	{
  		private Hashtable colConfigs ;
  
  		internal FCKeditorConfigurations()
  		{
  			colConfigs = new Hashtable() ;
  		}
  
  		public string this[ string configurationName ]
  		{
  			get
  			{
  				if ( colConfigs.ContainsKey( configurationName ) )
  					return (string)colConfigs[ configurationName ] ;
  				else
  					return null ;
  			}
  			set
  			{
  				colConfigs[ configurationName ] = value ;
  			}
  		}
  
  		internal string GetHiddenFieldString()
  		{
  			System.Text.StringBuilder osParams = new System.Text.StringBuilder() ;
  
  			foreach ( DictionaryEntry oEntry in colConfigs )
  			{
  				if ( osParams.Length > 0 )
  					osParams.Append( '&' ) ;
  
  				osParams.AppendFormat( "{0}={1}", System.Web.HttpUtility.HtmlEncode( oEntry.Key.ToString() ), System.Web.HttpUtility.HtmlEncode( oEntry.Value.ToString() ) ) ;
  			}
  
  			return osParams.ToString() ;
  		}
  	}
  }
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FCKeditorDesigner.cs
  
  Index: FCKeditorDesigner.cs
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: FCKeditorDesigner.cs
   * 	The EditorDesigner class defines the editor visualization at design 
   * 	time. 
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:17:24
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  using System ;
  using System.Globalization ;
  
  namespace FredCK.FCKeditorV2
  {
  	public class FCKeditorDesigner : System.Web.UI.Design.ControlDesigner
  	{
  		public FCKeditorDesigner()
  		{
  		}
  
  		public override string GetDesignTimeHtml() 
  		{
  			FCKeditor oControl = (FCKeditor)Component ;
  			return String.Format( CultureInfo.InvariantCulture,
  				"<div><table width=\"{0}\" height=\"{1}\" bgcolor=\"#f5f5f5\" bordercolor=\"#c7c7c7\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\"><tr><td valign=\"middle\" align=\"center\">FCKeditor V2 - <b>{2}</b></td></tr></table></div>",
  					oControl.Width,
  					oControl.Height,
  					oControl.ID ) ;
  		}
  	}
  }
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FileBrowserConnector.cs
  
  Index: FileBrowserConnector.cs
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: FileBrowserConnector.cs
   * 	This is the code behind of the connector.aspx page used by the 
   * 	File Browser.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:17:24
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  using System ;
  using System.Globalization ;
  using System.Xml ;
  using System.Web ;
  
  namespace FredCK.FCKeditorV2
  {
  	public class FileBrowserConnector : System.Web.UI.Page
  	{
  		private const string DEFAULT_USER_FILES_PATH = "/UserFiles/" ;
  
  		private string sUserFilesPath ;
  		private string sUserFilesDirectory ;
  
  		protected override void OnLoad(EventArgs e)
  		{
  			// Get the main request informaiton.
  			string sCommand = Request.QueryString["Command"] ;
  			if ( sCommand == null ) return ;
  
  			string sResourceType = Request.QueryString["Type"] ;
  			if ( sResourceType == null ) return ;
  
  			string sCurrentFolder = Request.QueryString["CurrentFolder"] ;
  			if ( sCurrentFolder == null ) return ;
  
  			// Check the current folder syntax (must begin and start with a slash).
  			if ( ! sCurrentFolder.EndsWith( "/" ) )
  				sCurrentFolder += "/" ;
  			if ( ! sCurrentFolder.StartsWith( "/" ) )
  				sCurrentFolder = "/" + sCurrentFolder ;
  
  			// File Upload doesn't have to return XML, so it must be intercepted before anything.
  			if ( sCommand == "FileUpload" )
  			{
  				this.FileUpload( sResourceType, sCurrentFolder ) ;
  				return ;
  			}
  
  			// Cleans the response buffer.
  			Response.ClearHeaders() ;
  			Response.Clear() ;
  
  			// Prevent the browser from caching the result.
  			Response.CacheControl = "no-cache" ;
  
  			// Set the response format.
  			Response.ContentEncoding	= System.Text.UTF8Encoding.UTF8 ;
  			Response.ContentType		= "text/xml" ;
  
  			XmlDocument oXML = new XmlDocument() ;
  			XmlNode oConnectorNode = CreateBaseXml( oXML, sCommand, sResourceType, sCurrentFolder ) ;
  
  			// Execute the required command.
  			switch( sCommand )
  			{
  				case "GetFolders" :
  					this.GetFolders( oConnectorNode, sResourceType, sCurrentFolder ) ;
  					break ;
  				case "GetFoldersAndFiles" :
  					this.GetFolders( oConnectorNode, sResourceType, sCurrentFolder ) ;
  					this.GetFiles( oConnectorNode, sResourceType, sCurrentFolder ) ;
  					break ;
  				case "CreateFolder" :
  					this.CreateFolder( oConnectorNode, sResourceType, sCurrentFolder ) ;
  					break ;
  			}
  
  			// Output the resulting XML.
  			Response.Write( oXML.OuterXml ) ;
  
  			Response.End() ;
  		}
  
  		#region Base XML Creation
  
  		private XmlNode CreateBaseXml( XmlDocument xml, string command, string resourceType, string currentFolder )
  		{
  			// Create the XML document header.
  			xml.AppendChild( xml.CreateXmlDeclaration( "1.0", "utf-8", null ) ) ;
  
  			// Create the main "Connector" node.
  			XmlNode oConnectorNode = XmlUtil.AppendElement( xml, "Connector" ) ;
  			XmlUtil.SetAttribute( oConnectorNode, "command", command ) ;
  			XmlUtil.SetAttribute( oConnectorNode, "resourceType", resourceType ) ;
  
  			// Add the current folder node.
  			XmlNode oCurrentNode = XmlUtil.AppendElement( oConnectorNode, "CurrentFolder" ) ;
  			XmlUtil.SetAttribute( oCurrentNode, "path", currentFolder ) ;
  			XmlUtil.SetAttribute( oCurrentNode, "url", GetUrlFromPath( resourceType, currentFolder) ) ;
  
  			return oConnectorNode ;
  		}
  
  		#endregion
  
  		#region Command Handlers
  
  		private void GetFolders( XmlNode connectorNode, string resourceType, string currentFolder )
  		{
  			// Map the virtual path to the local server path.
  			string sServerDir = this.ServerMapFolder( resourceType, currentFolder ) ;
  
  			// Create the "Folders" node.
  			XmlNode oFoldersNode = XmlUtil.AppendElement( connectorNode, "Folders" ) ;
  
  			System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo( sServerDir ) ;
  			System.IO.DirectoryInfo[] aSubDirs = oDir.GetDirectories() ;
  
  			for ( int i = 0 ; i < aSubDirs.Length ; i++ )
  			{
  				// Create the "Folders" node.
  				XmlNode oFolderNode = XmlUtil.AppendElement( oFoldersNode, "Folder" ) ;
  				XmlUtil.SetAttribute( oFolderNode, "name", aSubDirs[i].Name ) ;
  			}
  		}
  
  		private void GetFiles( XmlNode connectorNode, string resourceType, string currentFolder )
  		{
  			// Map the virtual path to the local server path.
  			string sServerDir = this.ServerMapFolder( resourceType, currentFolder ) ;
  
  			// Create the "Files" node.
  			XmlNode oFilesNode = XmlUtil.AppendElement( connectorNode, "Files" ) ;
  
  			System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo( sServerDir ) ;
  			System.IO.FileInfo[] aFiles = oDir.GetFiles() ;
  
  			for ( int i = 0 ; i < aFiles.Length ; i++ )
  			{
  				long iFileSize = ( aFiles[i].Length / 1024 ) ;
  				if ( iFileSize < 1 ) iFileSize = 1 ;
  
  				// Create the "Folders" node.
  				XmlNode oFileNode = XmlUtil.AppendElement( oFilesNode, "File" ) ;
  				XmlUtil.SetAttribute( oFileNode, "name", aFiles[i].Name ) ;
  				XmlUtil.SetAttribute( oFileNode, "size", iFileSize.ToString( CultureInfo.InvariantCulture ) ) ;
  			}
  		}
  
  		private void CreateFolder( XmlNode connectorNode, string resourceType, string currentFolder )
  		{
  			string sErrorNumber = "0" ;
  
  			string sNewFolderName = Request.QueryString["NewFolderName"] ;
  
  			if ( sNewFolderName == null || sNewFolderName.Length == 0 )
  				sErrorNumber = "102" ;
  			else
  			{
  				// Map the virtual path to the local server path of the current folder.
  				string sServerDir = this.ServerMapFolder( resourceType, currentFolder ) ;
  				System.IO.DirectoryInfo oDir = new System.IO.DirectoryInfo( sServerDir ) ;
  
  				try
  				{
  					oDir.CreateSubdirectory( sNewFolderName ) ;
  				}
  				catch ( ArgumentException )
  				{
  					sErrorNumber = "102" ;
  				}
  				catch ( System.IO.PathTooLongException )
  				{
  					sErrorNumber = "102" ;
  				}
  				catch ( System.IO.IOException )
  				{
  					sErrorNumber = "101" ;
  				}
  				catch ( System.Security.SecurityException )
  				{
  					sErrorNumber = "103" ;
  				}
  				catch ( Exception )
  				{
  					sErrorNumber = "110" ;
  				}
  			}
  
  			// Create the "Error" node.
  			XmlNode oErrorNode = XmlUtil.AppendElement( connectorNode, "Error" ) ;
  			XmlUtil.SetAttribute( oErrorNode, "number", sErrorNumber ) ;
  		}
  
  		private void FileUpload( string resourceType, string currentFolder )
  		{
  			HttpPostedFile oFile = Request.Files["NewFile"] ;
  
  			string sErrorNumber = "0" ;
  			string sFileName = "" ;
  
  			if ( oFile != null )
  			{
  				// Map the virtual path to the local server path.
  				string sServerDir = this.ServerMapFolder( resourceType, currentFolder ) ;
  
  				// Get the uploaded file name.
  				sFileName = System.IO.Path.GetFileName( oFile.FileName ) ;
  
  				int iCounter = 0 ;
  
  				while ( true )
  				{
  					string sFilePath = System.IO.Path.Combine( sServerDir, sFileName ) ;
  
  					if ( System.IO.File.Exists( sFilePath ) )
  					{
  						iCounter++ ;
  						sFileName = 
  							System.IO.Path.GetFileNameWithoutExtension( oFile.FileName ) +
  							"(" + iCounter + ")" +
  							System.IO.Path.GetExtension( oFile.FileName ) ;
  
  						sErrorNumber = "201" ;
  					}
  					else
  					{
  						oFile.SaveAs( sFilePath ) ;
  						break ;
  					}
  				}
  			}
  			else
  				sErrorNumber = "202" ;
  
  			Response.Clear() ;
  
  			Response.Write( "<script type=\"text/javascript\">" ) ;
  			Response.Write( "window.parent.frames['frmUpload'].OnUploadCompleted(" + sErrorNumber + ",'" + sFileName.Replace( "'", "\\'" ) + "') ;" ) ;
  			Response.Write( "</script>" ) ;
  
  			Response.End() ;
  		}
  
  		#endregion
  
  		#region Directory Mapping
  
  		private string ServerMapFolder( string resourceType, string folderPath )
  		{
  			// Get the resource type directory.
  			string sResourceTypePath = System.IO.Path.Combine( this.UserFilesDirectory, resourceType ) ;
  
  			// Ensure that the directory exists.
  			System.IO.Directory.CreateDirectory( sResourceTypePath ) ;
  
  			// Return the resource type directory combined with the required path.
  			return System.IO.Path.Combine( sResourceTypePath, folderPath.TrimStart('/') ) ;
  		}
  
  		private string GetUrlFromPath( string resourceType, string folderPath )
  		{
  			return this.UserFilesPath + resourceType + folderPath ;
  		}
  
  		private string UserFilesPath
  		{
  			get
  			{
  				if ( sUserFilesPath == null )
  				{
  					// Try to get the User Files path from the Web.config file.
  					sUserFilesPath = System.Configuration.ConfigurationSettings.AppSettings["FCKeditor:UserFilesPath"] ;
  
  					// If it was not set in the Web.config file then use the default value.
  					if ( sUserFilesPath == null || UserFilesPath.Length == 0 ) 
  						sUserFilesPath = DEFAULT_USER_FILES_PATH ;
  
  					// Check that the user path ends with slash ("/")
  					if ( ! sUserFilesPath.EndsWith("/") )
  						sUserFilesPath += "/" ;
  				}
  				return sUserFilesPath ;
  			}
  		}
  
  		private string UserFilesDirectory
  		{
  			get	
  			{
  				if ( sUserFilesDirectory == null )
  				{
  					// Get the local (server) directory path translation.
  					sUserFilesDirectory = Server.MapPath( this.UserFilesPath ) ;
  				}
  				return sUserFilesDirectory ;
  			}
  		}
  
  		#endregion
  	}
  }
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FredCK.FCKeditorV2.FxCop
  
  Index: FredCK.FCKeditorV2.FxCop
  ===================================================================
  ﻿<?xml version="1.0" encoding="utf-8"?>
  <FxCopProject Version="1.3" Name="FCKeditor V2">
   <ProjectOptions>
    <SharedProject>False</SharedProject>
    <Stylesheet Apply="False">c:\program files\microsoft fxcop 1.21\Xml\FxCopReport.xsl</Stylesheet>
    <SaveMessages>
     <Project Status="Active, Excluded" NewOnly="False" />
     <Report Status="Active" NewOnly="False" />
    </SaveMessages>
    <ProjectFile Compress="True" DefaultTargetCheck="True" DefaultRuleCheck="True" SaveByRuleGroup="" Deterministic="False" />
    <PermitAnalysis>True</PermitAnalysis>
    <SourceLookup>True</SourceLookup>
    <AnalysisExceptionsThreshold>100</AnalysisExceptionsThreshold>
    <RuleExceptionsThreshold>10</RuleExceptionsThreshold>
    <Spelling Locale="en-us" />
   </ProjectOptions>
   <Targets>
    <Target Name="bin\Debug\FredCK.FCKeditorV2.dll" Analyze="True" AnalyzeAllChildren="True" />
   </Targets>
   <Rules>
    <RuleFiles>
     <RuleFile Name="$(FxCopDir)\Rules\PerformanceRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\ComRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\UsageRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\SecurityRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\DesignRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\GlobalizationRules.dll" Enabled="True" AllRulesEnabled="True" />
     <RuleFile Name="$(FxCopDir)\Rules\NamingRules.dll" Enabled="True" AllRulesEnabled="True" />
    </RuleFiles>
    <Groups />
    <Settings />
   </Rules>
   <FxCopReport Version="1.3" LastAnalysis="2004-05-27 17:07:20Z">
    <Namespaces>
     <Namespace Name="FredCK.FCKeditorV2">
      <Messages>
       <Message ID="Keditor" Status="Excluded" Created="2004-01-14 00:37:50Z">
        <Rule TypeName="NamespaceNamesShouldBeSpelledCorrectly" />
        <Issues>
         <Issue Certainty="50" Level="CriticalWarning">
          <Resolution>
           <Data>
            <Items>
             <Item>FredCK.FCKeditorV2</Item>
             <Item>Keditor</Item>
            </Items>
           </Data>
          </Resolution>
         </Issue>
        </Issues>
        <Notes>
         <User Name="fredck">
          <Note ID="3" />
         </User>
        </Notes>
       </Message>
      </Messages>
     </Namespace>
    </Namespaces>
    <Targets>
     <Target Name="bin\Debug\FredCK.FCKeditorV2.dll">
      <Messages>
       <Message Status="Active" Created="2004-05-19 14:38:32Z">
        <Rule TypeName="AssembliesHavePermissionRequests" />
        <Issues>
         <Issue Certainty="99" Level="CriticalError">
          <Resolution>
           <Data>
            <Items>
             <Item>FredCK.FCKeditorV2</Item>
            </Items>
           </Data>
          </Resolution>
         </Issue>
        </Issues>
       </Message>
      </Messages>
      <Modules>
       <Module Name="fredck.fckeditorv2.dll">
        <Namespaces>
         <Namespace Name="FredCK.FCKeditorV2">
          <Classes>
           <Class Name="Editor">
            <Methods>
             <Method Name="Render(System.Web.UI.HtmlTextWriter):System.Void">
              <Messages>
               <Message Status="Active" Created="2004-05-19 14:48:27Z">
                <Rule TypeName="VirtualMethodsAndOverridesRequireSameLinkDemands" />
                <Issues>
                 <Issue Certainty="33" Level="CriticalError">
                  <SourceCode Path="D:\Work\FCKEditor\www\FCKeditor.V2\_aspnet\FredCK.FCKeditorV2" File="Editor.cs" Line="102" />
                  <Resolution>
                   <Data>
                    <Items>
                     <Item>Render</Item>
                     <Item>Render</Item>
                     <Item>Control</Item>
                    </Items>
                   </Data>
                  </Resolution>
                 </Issue>
                </Issues>
               </Message>
              </Messages>
             </Method>
             <Method Name="RaisePostDataChangedEvent():System.Void">
              <Messages>
               <Message Status="Active" Created="2004-05-19 14:48:27Z">
                <Rule TypeName="EventsShouldBeUsed" />
                <Issues>
                 <Issue Certainty="75" Level="Warning">
                  <SourceCode Path="D:\Work\FCKEditor\www\FCKeditor.V2\_aspnet\FredCK.FCKeditorV2" File="Editor.cs" Line="141" />
                  <Resolution>
                   <Data>
                    <Items>
                     <Item>RaisePostDataChangedEvent</Item>
                    </Items>
                   </Data>
                  </Resolution>
                 </Issue>
                </Issues>
               </Message>
              </Messages>
             </Method>
            </Methods>
           </Class>
           <Class Name="FileBrowserConnector">
            <Methods>
             <Method Name="CreateFolder(System.Xml.XmlNode,System.String,System.String):System.Void">
              <Messages>
               <Message Status="Excluded" Created="2004-05-27 17:07:20Z">
                <Rule TypeName="ExceptionAndSystemExceptionTypesAreNotCaught" />
                <Issues>
                 <Issue Certainty="95" Level="CriticalError">
                  <SourceCode Path="D:\Work\FCKEditor\www\FCKeditor.V2\_aspnet\FredCK.FCKeditorV2" File="FileBrowserConnector.cs" Line="185" />
                  <Resolution>
                   <Data>
                    <Items>
                     <Item>CreateFolder</Item>
                     <Item>Exception</Item>
                    </Items>
                   </Data>
                  </Resolution>
                 </Issue>
                </Issues>
                <Notes>
                 <User Name="fredck">
                  <Note ID="1" />
                 </User>
                </Notes>
               </Message>
              </Messages>
             </Method>
            </Methods>
           </Class>
           <Class Name="FCKeditorConfigurations">
            <Messages>
             <Message ID="Keditor" Status="Excluded" Created="2004-05-27 17:05:04Z">
              <Rule TypeName="TypeNamesShouldBeSpelledCorrectly" />
              <Issues>
               <Issue Certainty="75" Level="CriticalWarning">
                <Resolution>
                 <Data>
                  <Items>
                   <Item>FCKeditorConfigurations</Item>
                   <Item>Keditor</Item>
                  </Items>
                 </Data>
                </Resolution>
               </Issue>
              </Issues>
              <Notes>
               <User Name="fredck">
                <Note ID="2" />
               </User>
              </Notes>
             </Message>
            </Messages>
           </Class>
          </Classes>
         </Namespace>
        </Namespaces>
       </Module>
      </Modules>
     </Target>
    </Targets>
    <Notes>
     <User Name="fredck">
      <Note ID="1" Modified="2004-05-27 17:08:08Z">The exception is handled in the right way in this case.</Note>
      <Note ID="2" Modified="2004-05-27 17:08:48Z">FxCop was confused with the editor name.</Note>
      <Note ID="3" Modified="2004-05-27 17:12:26Z">FxCop was confused with the editor name.</Note>
     </User>
    </Notes>
    <Rules>
     <Rule TypeName="AssembliesHavePermissionRequests">
      <Name>Assemblies specify permission requests</Name>
      <Description>Permission requests prevent security exceptions from being thrown after code in an assembly has already begun executing. With permission requests, the assembly does not load if it has insufficient permissions. This rule will fire if you have specified a permission request incorrectly, or incompletely. If you have specified requests but FxCop reports a violation for this rule, use the PermView.exe tool to view the security permissions in the assembly. An unenforceable permission appears as an empty permission set.</Description>
      <LongDescription>You should add attributes specifying what permissions your assembly will demand, might demand, and what permissions it does not want granted.  For example, the following attribute indicates that an assembly will, at minimum, require read access to the USERNAME environment variable: [assembly:EnvironmentPermissionAttribute(SecurityAction.RequestMinimum,
  Read="USERNAME")]. To specify permissions that the assembly might demand, use SecurityAction.RequestOptional. To specify permissions that the assembly must not be granted, use SecurityAction.RequestRefuse.</LongDescription>
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/UsageRules/AssembliesPermissionRequests.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="99">CriticalError</MessageLevel>
      <File Name="UsageRules.dll" Version="1.30.0.0" />
     </Rule>
     <Rule TypeName="EventsShouldBeUsed">
      <Name>The .NET event model should be used whenever appropriate</Name>
      <Description>A method name suggestive of event functionality was encountered.</Description>
      <LongDescription />
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/DesignRules/EventsShouldBeUsed.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="75">Warning</MessageLevel>
      <File Name="DesignRules.dll" Version="1.30.0.0" />
     </Rule>
     <Rule TypeName="ExceptionAndSystemExceptionTypesAreNotCaught">
      <Name>System.Exception and System.SystemException are not caught</Name>
      <Description>You should not catch Exception or SystemException.</Description>
      <LongDescription>Catching generic exception types can hide run-time problems from the library user, and can complicate debugging. You should catch only those exceptions that you can handle gracefully.</LongDescription>
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/DesignRules/ExceptionAndSystemException.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="95">CriticalError</MessageLevel>
      <File Name="DesignRules.dll" Version="1.30.0.0" />
     </Rule>
     <Rule TypeName="NamespaceNamesShouldBeSpelledCorrectly">
      <Name>Namespace names should consist of correctly spelled words</Name>
      <Description>The individual words that make up a namespace should not be abbreviated and should be spelled correctly.</Description>
      <LongDescription>If this rule generates a false positive on a term that should be recognized, add the word to the FxCop custom dictionary.</LongDescription>
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/UsageRules/NamespaceSpelling.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="50">CriticalWarning</MessageLevel>
      <File Name="UsageRules.dll" Version="1.30.0.0" />
     </Rule>
     <Rule TypeName="TypeNamesShouldBeSpelledCorrectly">
      <Name>Type names should consist of correctly spelled words</Name>
      <Description>The individual words that make up a type name should not be abbreviated and should be spelled correctly.</Description>
      <LongDescription>If this rule generates a false positive on a term that should be recognized, add the word to the FxCop custom dictionary.</LongDescription>
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/UsageRules/TypeSpelling.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="75">CriticalWarning</MessageLevel>
      <File Name="UsageRules.dll" Version="1.30.0.0" />
     </Rule>
     <Rule TypeName="VirtualMethodsAndOverridesRequireSameLinkDemands">
      <Name>Virtual methods and their overrides require the same LinkDemand status</Name>
      <Description>If a virtual method has a LinkDemand, in many cases, so should any override of it, and if an override has a LinkDemand, so should the overridden virtual method.</Description>
      <LongDescription>As it is possible to call any of the overrides of a virtual method explicitly, they should all have the same LinkDemand status or, if not, should be reviewed. This also applies to LinkDemand security checks for methods that part of an interface implementation, because the caller might use an interface-typed reference to access the method.</LongDescription>
      <GroupOwner>MS FxCopDev</GroupOwner>
      <DevOwner />
      <Url>http://www.gotdotnet.com/team/fxcop/docs/rules/SecurityRules/VirtualMethodsAndOverrides.html</Url>
      <Email>askfxcop@microsoft.com</Email>
      <MessageLevel Certainty="33">CriticalError</MessageLevel>
      <File Name="SecurityRules.dll" Version="1.30.0.0" />
     </Rule>
    </Rules>
   </FxCopReport>
  </FxCopProject>
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FredCK.FCKeditorV2.csproj
  
  Index: FredCK.FCKeditorV2.csproj
  ===================================================================
  <VisualStudioProject>
      <CSHARP
          ProjectType = "Local"
          ProductVersion = "7.10.3077"
          SchemaVersion = "2.0"
          ProjectGuid = "{F6F32704-97E0-4006-A474-5A9729C6B1B4}"
      >
          <Build>
              <Settings
                  ApplicationIcon = ""
                  AssemblyKeyContainerName = ""
                  AssemblyName = "FredCK.FCKeditorV2"
                  AssemblyOriginatorKeyFile = ""
                  DefaultClientScript = "JScript"
                  DefaultHTMLPageLayout = "Grid"
                  DefaultTargetSchema = "IE50"
                  DelaySign = "false"
                  OutputType = "Library"
                  PreBuildEvent = ""
                  PostBuildEvent = ""
                  RootNamespace = "FredCK.FCKeditorV2"
                  RunPostBuildEvent = "OnBuildSuccess"
                  StartupObject = ""
              >
                  <Config
                      Name = "Debug"
                      AllowUnsafeBlocks = "false"
                      BaseAddress = "285212672"
                      CheckForOverflowUnderflow = "false"
                      ConfigurationOverrideFile = ""
                      DefineConstants = "DEBUG;TRACE"
                      DocumentationFile = ""
                      DebugSymbols = "true"
                      FileAlignment = "4096"
                      IncrementalBuild = "false"
                      NoStdLib = "false"
                      NoWarn = ""
                      Optimize = "false"
                      OutputPath = "bin\Debug\"
                      RegisterForComInterop = "false"
                      RemoveIntegerChecks = "false"
                      TreatWarningsAsErrors = "false"
                      WarningLevel = "4"
                  />
                  <Config
                      Name = "Release"
                      AllowUnsafeBlocks = "false"
                      BaseAddress = "285212672"
                      CheckForOverflowUnderflow = "false"
                      ConfigurationOverrideFile = ""
                      DefineConstants = "TRACE"
                      DocumentationFile = ""
                      DebugSymbols = "false"
                      FileAlignment = "4096"
                      IncrementalBuild = "false"
                      NoStdLib = "false"
                      NoWarn = ""
                      Optimize = "true"
                      OutputPath = "bin\Release\"
                      RegisterForComInterop = "false"
                      RemoveIntegerChecks = "false"
                      TreatWarningsAsErrors = "false"
                      WarningLevel = "4"
                  />
              </Settings>
              <References>
                  <Reference
                      Name = "System"
                      AssemblyName = "System"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
                  />
                  <Reference
                      Name = "System.Data"
                      AssemblyName = "System.Data"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
                  />
                  <Reference
                      Name = "System.XML"
                      AssemblyName = "System.Xml"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
                  />
                  <Reference
                      Name = "System.Design"
                      AssemblyName = "System.Design"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Design.dll"
                  />
                  <Reference
                      Name = "System.Drawing"
                      AssemblyName = "System.Drawing"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll"
                  />
                  <Reference
                      Name = "System.Web"
                      AssemblyName = "System.Web"
                      HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Web.dll"
                  />
              </References>
          </Build>
          <Files>
              <Include>
                  <File
                      RelPath = "AssemblyInfo.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "FCKeditor.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "FCKeditorConfigurations.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "FCKeditorDesigner.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "FileBrowserConnector.cs"
                      SubType = "ASPXCodeBehind"
                      BuildAction = "Compile"
                  />
                  <File
                      RelPath = "FredCK.FCKeditorV2.FxCop"
                      BuildAction = "None"
                  />
                  <File
                      RelPath = "FredCK.FCKeditorV2.snk"
                      BuildAction = "None"
                  />
                  <File
                      RelPath = "XmlUtil.cs"
                      SubType = "Code"
                      BuildAction = "Compile"
                  />
              </Include>
          </Files>
      </CSHARP>
  </VisualStudioProject>
  
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FredCK.FCKeditorV2.csproj.user
  
  Index: FredCK.FCKeditorV2.csproj.user
  ===================================================================
  <VisualStudioProject>
      <CSHARP LastOpenVersion = "7.10.3077" >
          <Build>
              <Settings ReferencePath = "" >
                  <Config
                      Name = "Debug"
                      EnableASPDebugging = "false"
                      EnableASPXDebugging = "false"
                      EnableUnmanagedDebugging = "false"
                      EnableSQLServerDebugging = "false"
                      RemoteDebugEnabled = "false"
                      RemoteDebugMachine = ""
                      StartAction = "Project"
                      StartArguments = ""
                      StartPage = ""
                      StartProgram = ""
                      StartURL = ""
                      StartWorkingDirectory = ""
                      StartWithIE = "true"
                  />
                  <Config
                      Name = "Release"
                      EnableASPDebugging = "false"
                      EnableASPXDebugging = "false"
                      EnableUnmanagedDebugging = "false"
                      EnableSQLServerDebugging = "false"
                      RemoteDebugEnabled = "false"
                      RemoteDebugMachine = ""
                      StartAction = "Project"
                      StartArguments = ""
                      StartPage = ""
                      StartProgram = ""
                      StartURL = ""
                      StartWorkingDirectory = ""
                      StartWithIE = "true"
                  />
              </Settings>
          </Build>
          <OtherProjectSettings
              CopyProjectDestinationFolder = ""
              CopyProjectUncPath = ""
              CopyProjectOption = "0"
              ProjectView = "ProjectFiles"
              ProjectTrust = "0"
          />
      </CSHARP>
  </VisualStudioProject>
  
  
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/FredCK.FCKeditorV2.snk
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/XmlUtil.cs
  
  Index: XmlUtil.cs
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: XmlUtil.cs
   * 	Useful tools.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:17:24
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  using System ;
  using System.Globalization ;
  using System.Xml ;
  
  namespace FredCK.FCKeditorV2
  {
  	internal sealed class XmlUtil
  	{
  		private XmlUtil()
  		{}
  
  		public static XmlNode AppendElement( XmlNode node, string newElementName )
  		{
  			return AppendElement( node, newElementName, null ) ;
  		}
  
  		public static XmlNode AppendElement( XmlNode node, string newElementName, string innerValue )
  		{
  			XmlNode oNode ;
  
  			if ( node is XmlDocument )
                  oNode = node.AppendChild( ((XmlDocument)node).CreateElement( newElementName ) ) ;
  			else
  				oNode = node.AppendChild( node.OwnerDocument.CreateElement( newElementName ) ) ;
  
  			if ( innerValue != null )
  				oNode.AppendChild( node.OwnerDocument.CreateTextNode( innerValue ) ) ;
  
  			return oNode ;
  		}
  
  		public static XmlAttribute CreateAttribute( XmlDocument xmlDocument, string name, string value )
  		{
  			XmlAttribute oAtt = xmlDocument.CreateAttribute( name ) ;
  			oAtt.Value = value ;
  			return oAtt ;
  		}
  
  		public static void SetAttribute( XmlNode node, string attributeName, string attributeValue )
  		{
  			if ( node.Attributes[ attributeName ] != null )
  				node.Attributes[ attributeName ].Value = attributeValue ;
  			else
  				node.Attributes.Append( CreateAttribute( node.OwnerDocument, attributeName, attributeValue ) ) ;
  		}
  	}
  }
  
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Debug
                        FredCK.FCKeditorV2.dll FredCK.FCKeditorV2.pdb
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Debug/FredCK.FCKeditorV2.dll
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Debug/FredCK.FCKeditorV2.pdb
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Release
                        FredCK.FCKeditorV2.dll
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_aspnet/FredCK.FCKeditorV2/bin/Release/FredCK.FCKeditorV2.dll
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses
                        CreateFolder.xml FileUpload.html GetFolders.xml
                        GetFoldersAndFiles.xml
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses/CreateFolder.xml
  
  Index: CreateFolder.xml
  ===================================================================
  <?xml version="1.0" encoding="utf-8" ?> 
  <Connector command="GetFolders" resourceType="File">
  	<CurrentFolder path="/SampleDir/Test/" url="/UserFiles/File/SampleDir/Test/" />
  	<Error number="0" />	
  	<!-- 
  	Errors Numbers:
  		0   : No errors found
  		101 : Folder already exists
  		102 : Invalid folder name
  		103 : You have no permissions to create the folder
  		110 : Unknown error creating folder
  	-->
  </Connector>
  
  
  1.1                  siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses/FileUpload.html
  
  Index: FileUpload.html
  ===================================================================
  <script type="text/javascript">
  window.parent.frames['frmUpload'].OnUploadCompleted(0) ;
  </script>
  <!--
  These are the possible responses:
  
  window.parent.frames['frmUpload'].OnUploadCompleted(0) ;						// No erros found.
  window.parent.frames['frmUpload'].OnUploadCompleted(201, 'FileName(1).ext') ;	// When a file with the same name already exists.
  window.parent.frames['frmUpload'].OnUploadCompleted(202) ;						// Invalid file.
  -->
  
  
  1.1                  siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses/GetFolders.xml
  
  Index: GetFolders.xml
  ===================================================================
  <?xml version="1.0" encoding="utf-8" ?> 
  <Connector command="GetFolders" resourceType="File">
  	<CurrentFolder path="/SampleDir/Test/" url="/UserFiles/File/SampleDir/Test/" />
  	<Folders>
  		<Folder name="Documents" />
  		<Folder name="Files" />
  		<Folder name="Other Files" />
  		<Folder name="Related" />
  	</Folders>
  </Connector>
  
  
  1.1                  siminweb/util/fckeditor/_documentation/Developers/FileBrowserConnectors/SampleResponses/GetFoldersAndFiles.xml
  
  Index: GetFoldersAndFiles.xml
  ===================================================================
  <?xml version="1.0" encoding="utf-8" ?> 
  <Connector command="GetFolders" resourceType="File">
  	<CurrentFolder path="/SampleDir/Test/" url="/UserFiles/File/SampleDir/Test/" />
  	<Folders>
  		<Folder name="Documents" />
  		<Folder name="Files" />
  		<Folder name="Other Files" />
  		<Folder name="Related" />
  	</Folders>
  	<Files>
  		<File name="XML Definition.doc" size="14" />
  		<File name="Samples.txt" size="5" />
  		<File name="Definition.txt" size="125" />
  		<File name="External Resources.drw" size="840" />
  		<File name="Todo.txt" size="2" />
  	</Files>
  </Connector>
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_documentation/Developers
                        ServerSideIntegration.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_documentation/Developers/ServerSideIntegration.html
  
  Index: ServerSideIntegration.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 22:33:20
  -->
  <html>
  	<head>
  		<title>FCKeditor - Using FCKeditor with JavaScript</title>
  		<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  		<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  		<meta content="VisualStudio.HTML" name="ProgId">
  		<meta content="Microsoft Visual Studio .NET 7.1" name="Originator">
  		<LINK href="../fck_docs.css" type="text/css" rel="stylesheet">
  	</head>
  	<body>
  		<H1>Server Side Integration Guidelines</H1>
  		<P>This documet offers some guidelines that must be considered when 
  			developing&nbsp;server side integration for FCKeditor (alias Server Side 
  			Integration Pack).</P>
  		<P>There a few points of integration that every server side technology should have 
  			to be completely ready for FCKeditor. These are the main features:</P>
  		<UL>
  			<UL>
  				<LI>
  					<A href="#FCKeditorCreator">FCKeditor Creator</A>
  				<LI>
  					<A href="#FileUploadManager">File Upload Manager</A>
  				<LI>
  					<A href="#FileBrowser">File Browser</A>
  				<LI>
  					<A href="#Samples">Samples</A>
  				<LI>
  					<A href="#Documentation">Documentation</A></LI></UL>
  		</UL>
  		<P>This document will present the basic (minimum) features the integration must 
  			accomplish to. Any other feature is a welcome surplus. The scope of this 
  			document is to provide a generic pattern&nbsp;in the way the editor can have a 
  			homogeneous programming style even throw different languages.</P>
  		<HR width="100%" SIZE="1">
  		<H2 id="FCKeditorCreator">FCKeditor Creator</H2>
  		<P>This is the main integration feature needed. It makes it possible to create an 
  			instance of FCKeditor in a page using the desired server side language. Object 
  			oriented programming (OOP) should be used wherever is possible. These are the 
  			tasks the Integration Pack should propose to the end user programmer:</P>
  		<UL>
  			<UL>
  				<LI>
  				Editor Instance Creation
  				<LI>
  				Configuration and Settings
  				<LI>
  					Automatic Browser Compatibility Detection:
  					<UL>
  						<LI>
  						Output HTML&nbsp;of the editor IFRAME for compatible browsers.
  						<LI>
  							Output HTML of a simple TEXTAREA for not compatible browsers.</LI></UL>
  				</LI>
  			</UL>
  		</UL>
  		<P>Suppose the editor instance is called "MyEditor". For compatible browser the 
  			Integration Pack should output HTML like this:</P>
  		<code>&lt;div&gt;<BR>
  			&lt;input type="hidden" id="<STRONG>MyEditor</STRONG>" name="MyEditor" value="<STRONG><EM>initial 
  					value (HTML encoded)</EM> </STRONG>"&gt;<BR>
  			&lt;input type="hidden" id="<STRONG>MyEditor</STRONG>___Config" value="<STRONG>Key1=Value1&amp;Key2=Value2&amp;...
  				<EM>(Key/Value:HTML encoded)</EM></STRONG>"&gt;<BR>
  			&lt;iframe id="<STRONG>MyEditor</STRONG>___Frame" src="<STRONG>/FCKeditor/</STRONG>editor/fckeditor.html?InstanceName=<STRONG>MyEditor</STRONG>&amp;Toolbar=<STRONG>Default</STRONG>" 
  			width="<STRONG>100%</STRONG>" height="<STRONG>200</STRONG>" frameborder="no" 
  			scrolling="no"&gt;&lt;/iframe&gt;<BR>
  			&lt;/div&gt;<BR>
  		</code>
  		<P>While non compatible browsers should get:</P>
  		<code>&lt;div&gt;<BR>
  			&lt;textarea name="<STRONG>MyEditor</STRONG>" rows="4" cols="40" style="WIDTH: <STRONG>
  				100%</STRONG>; HEIGHT: <STRONG>200px</STRONG>" wrap="virtual"&gt;<STRONG><EM>initial 
  					value (HTML encoded)</EM></STRONG>&lt;/textarea&gt;<BR>
  			&lt;/div&gt;</code>
  		<H3>FCKeditor Class</H3>
  		<P>The Integration pack should usually offer a main class, called "FCKeditor", in a 
  			file called "fckeditor.ext" placed in the root of the editor's distribution 
  			package. To be able to use the class the end user should just include a "link" 
  			to that file and then easily create an instance of it. Obviously this is the 
  			common scenario for scripting languages. Other languages should just reflect 
  			this situation in the better way it's possible.</P>
  		<P>This is the basic structure of the FCKeditor Class:</P>
  		<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  			<div class="classDefinition">
  				<P><STRONG>Constructor</STRONG></P>
  				<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  					<P>FCKeditor( instanceName )</P>
  				</BLOCKQUOTE>
  				<P><STRONG>Properties</STRONG></P>
  				<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  					<P>InstanceName<BR>
  						Width
  						<BR>
  						Height
  						<BR>
  						ToolbarSet
  						<BR>
  						Value
  						<BR>
  						BasePath</P>
  				</BLOCKQUOTE>
  				<P><STRONG>Collections</STRONG></P>
  				<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  					<P>Config <EM>(Only if possible to use collections)</EM></P>
  				</BLOCKQUOTE>
  				<P><STRONG>Methods</STRONG></P>
  				<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  					<P>Create()<BR>
  						SetConfig( key, value ) <EM>(Only if not possible to use collections)</EM></P>
  				</BLOCKQUOTE>
  			</div>
  		</BLOCKQUOTE>
  		<P>The implementation should be based on the Javascript implementation (see 
  			fckeditor.js file). See <A href="../Using%20FCKeditor/Javascript.html">/_documentation/Developers/Using 
  				FCKeditor/Javascript.html</A> for a complete explanation of the class 
  			elements.</P>
  		<HR width="100%" SIZE="1">
  		<H2 id="FileUploadManager">File Upload Manager</H2>
  		<P>[&nbsp;Documentation not yet available&nbsp;]</P>
  		<HR width="100%" SIZE="1">
  		<H2 id="FileBrowser">File Browser</H2>
  		<P>The editor gives the end user the flexibility to create a custom file browser 
  			that can be integrated on it. This is a powerful feature, because every case is 
  			a different case and so different and specific problems must be solved. In any 
  			case, the editor package offers a default implementation of the File Browser so 
  			the user has a ready to use software without having to develop anything.</P>
  		<P>On prior versions, a sample File Browser was available for each server side 
  			technology the editor was integrated. The problem with that approach is that 
  			each sample had a different implementation and worked completed different from 
  			each other. And worst, on some of then it was really poor.</P>
  		<P>To solve that problems the actual version offers a <STRONG>unique interface</STRONG>
  			that can be used by all server side languages. The interface was developed 
  			completely on Javascript DHTML and the integration is available by <STRONG>XML</STRONG>. 
  			In this way the developer that wants to integrate with it doesn't have be 
  			worried about the presentation layer of it.</P>
  		<H3>The Architecture</H3>
  		<P>The following graphic shows how the File Browser Integration works:</P>
  		<P align="center"><IMG src="images/FileBrowserConnector.gif"></P>
  		<P align="left">The "Connector" is the main file to be developed in this case 
  			regarding the server side integration with the File Browser. The following 
  			tasks must be done by the Connector:</P>
  		<UL>
  			<UL>
  				<LI>
  					<DIV align="left">Receive the File Manager requests.</DIV>
  				<LI>
  					<DIV align="left">Execute operations in the File System, like folder and files 
  						creations and listings.</DIV>
  				<LI>
  					<DIV align="left">Build&nbsp;the XML response in the right format and syntax.</DIV>
  				<LI>
  					<DIV align="left">Receive and handle file uploads from the File Browser.</DIV>
  				</LI>
  			</UL>
  		</UL>
  		<H3>The File Browser Requests</H3>
  		<P>All requests are simply made by the File Browser using the normal HTTP channel. 
  			The request info is always passed by QueryString in the URL that reflects the 
  			following format:</P>
  		<code>connector.ext?Command=<STRONG>CommandName</STRONG>&amp;Type=<STRONG>ResourceType</STRONG>&amp;CurrentFolder=<STRONG>FolderPath</STRONG></code>
  		<p><STRONG>CommandName</STRONG><BR>
  			Is the command the Connector must execute. For now there are three commands 
  			that must be handled: "GetFolders", "GetFoldersAndFiles" and "CreateFolder".</p>
  		<P><STRONG>ResourceType</STRONG><BR>
  			The File Browser is used on many parts of the editor, like the Link and Image 
  			dialog boxes and in the future Flash and Multimedia dialogs.&nbsp;So to 
  			separate each "Resource Type" the following type names&nbsp;are 
  			used:&nbsp;"File", "Image", "Flash" and "Media".</P>
  		<P><STRONG>FolderPath</STRONG><BR>
  			Represents the path of the actual folder visible in the File Browser. This path 
  			is not the final URL path for that folder, but it is relative to the Resource 
  			Type folder. The final folder is composed by: "Configured User Files Path" + 
  			"Resource Type" + "Folder Path". For example, the Folder Path "/Docs/Test/" 
  			of&nbsp;resources type "Image"&nbsp;could correspond to the following URL path: 
  			"/UserFiles/Image/Docs/Test/".</P>
  		<P>The developer is encouraged to make available a easy way to configure the "User 
  			Files" folder by the end user. For example,&nbsp;for the ASP.NET Connector the 
  			user can use the global Web.config file to set witch folder to use the file. In 
  			case of absent configuration the Connector must use the "/UserFiles/" folder. 
  			The Connector should also automatically create the folder in the case it not 
  			exists.</P>
  		<P>The Folder Path must always begin and finish with a slash ("/").</P>
  		<H3>The Connector Responses</H3>
  		<P>All Connector responses have the same base XML structure, like this:</P>
  		<code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  			<br>
  			&nbsp; &lt;Connector command="<STRONG>RequestedCommandName</STRONG>" 
  			resourceType="<STRONG> RequestedResourceType</STRONG>"&gt;<br>
  			&nbsp;&nbsp;&nbsp; &lt;CurrentFolder path="<STRONG>CurrentFolderPath</STRONG>" 
  			url="<STRONG>CurrentFolderUrl</STRONG>" /&gt;<BR>
  			&nbsp;&nbsp;&nbsp; <STRONG>&lt;!-- Here goes all specific command data --&gt;</STRONG>
  			<br>
  			&lt;/Connector&gt; </code>
  		<P>Some important things must be considered when building the response:</P>
  		<UL>
  			<UL>
  				<LI>
  				The response encoding must be set to "text/xml".
  				<LI>
  				The "Cache-Control" HTTP header must be set to "no-cache". This is need because 
  				the browsers usually cache the requests for XML files and this is not wanted in 
  				this case.
  				<LI>
  					The Path and the URL must always start and finish with a slash (/).</LI></UL>
  		</UL>
  		<H3>The Commands</H3>
  		<P>The actual File Browser version&nbsp;has 3 commands that wait for XML responses 
  			and 1&nbsp;command that wait for HTML:</P>
  		<UL>
  			<UL>
  				<LI>
  					<STRONG>GetFolders</STRONG>
  				(XML): gets the list of the children folders of a folder.
  				<LI>
  					<STRONG>GetFoldersAndFiles</STRONG>
  				(XML): similar to the above command, gets the list of the children folders and 
  				files of a folder.
  				<LI>
  					<STRONG>CreateFolder</STRONG>
  				(XML): creates a child folder.
  				<LI>
  					<STRONG>FileUpload</STRONG> (HTML): adds a file in a folder.</LI></UL>
  		</UL>
  		<P>Sample responses can be found&nbsp;in 
  			the&nbsp;"_documentation/Developers/FileBrowserConnectors/SampleResponses" 
  			folder.</P>
  		<P><STRONG>GetFolders<BR>
  			</STRONG>Gets the list of the children folders of a folder.</P>
  		<P>Sample Request:</P>
  		<code>connector.ext?Command=<STRONG>GetFolders</STRONG>&amp;Type=<STRONG>File</STRONG>&amp;CurrentFolder=<STRONG>/Samples/Docs/</STRONG>
  		</code>
  		<P>Sample Response:</P>
  		<CODE>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  			<BR>
  			&nbsp; &lt;Connector command="<STRONG>GetFolders</STRONG>" resourceType="<STRONG>File</STRONG>"&gt;<BR>
  			&nbsp;&nbsp;&nbsp; &lt;CurrentFolder path="<STRONG>/Samples/Docs/</STRONG>" 
  			url="<STRONG>/UserFiles/File/Samples/Docs/</STRONG>" /&gt;<BR>
  			<STRONG>&nbsp;&nbsp;&nbsp; &lt;Folders&gt;<BR>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Folder name="Documents" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Files" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Other Files" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Related" /&gt;<BR>
  				&nbsp; &nbsp;&lt;/Folders&gt;<BR>
  			</STRONG>&lt;/Connector&gt; </CODE>
  		<P><STRONG><STRONG>GetFoldersAndFiles</STRONG>
  				<BR>
  			</STRONG>Gets the list of the children folders and files&nbsp;of a folder.</P>
  		<P>Sample Request:</P>
  		<p></p>
  		<CODE>connector.ext?Command=<STRONG>GetFoldersAndFiles</STRONG>&amp;Type=<STRONG>File</STRONG>&amp;CurrentFolder=<STRONG>/Samples/Docs/</STRONG></CODE>
  		<P></P>
  		<P>Sample Response:</P>
  		<CODE>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  			<BR>
  			&nbsp; &lt;Connector command="<STRONG>GetFoldersAndFiles</STRONG>" 
  			resourceType="<STRONG>File</STRONG>"&gt;<BR>
  			&nbsp;&nbsp;&nbsp; &lt;CurrentFolder path="<STRONG>/Samples/Docs/</STRONG>" 
  			url="<STRONG>/UserFiles/File/Samples/Docs/</STRONG>" /&gt;<BR>
  			<STRONG>&nbsp;&nbsp;&nbsp; &lt;Folders&gt;<BR>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Folder name="Documents" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Files" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Other Files" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;Folder name="Related" /&gt;<BR>
  				&nbsp; &nbsp; &lt;/Folders&gt;<BR>
  				&nbsp; &nbsp; &lt;Files&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp; &lt;File name="XML Definition.doc" size="14" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;File name="Samples.txt" size="5" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;File name="Definition.txt" size="125" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;File name="External Resources.drw" 
  				size="840" /&gt;<BR>
  				&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;File name="Todo.txt" size="2" /&gt;<BR>
  				&nbsp;&nbsp; &nbsp;&lt;/Files&gt;<BR>
  			</STRONG>&lt;/Connector&gt; </CODE>
  		<P>The file size&nbsp;must be expressed&nbsp;as KBytes (KB).</P>
  		<P><STRONG>CreateFolder<BR>
  			</STRONG>Creates a child folder.</P>
  		<P>Sample Request:</P>
  		<p></p>
  		<CODE>connector.ext?Command=<STRONG>CreateFolder</STRONG>&amp;Type=<STRONG>File</STRONG>&amp;CurrentFolder=<STRONG>/Samples/Docs/</STRONG>&amp;NewFolderName=<STRONG>FolderName</STRONG></CODE>
  		<P></P>
  		<P>Sample Response:</P>
  		<CODE>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  			<BR>
  			&nbsp; &lt;Connector command="<STRONG>CreateFolder</STRONG>" resourceType="<STRONG>File</STRONG>"&gt;<BR>
  			&nbsp;&nbsp;&nbsp; &lt;CurrentFolder path="<STRONG>/Samples/Docs/</STRONG>" 
  			url="<STRONG>/UserFiles/File/Samples/Docs/</STRONG>" /&gt;<BR>
  			<STRONG>&nbsp;&nbsp;&nbsp; &lt;Error number="0" /&gt;<BR>
  			</STRONG>&lt;/Connector&gt; </CODE>
  		<P>Possible Error Numbers are:</P>
  		<UL>
  			<UL>
  				<LI>
  					<STRONG>0</STRONG>
  				: No Errors Found. The folder has been created.
  				<LI>
  					<STRONG>101</STRONG>
  				: Folder already exists.
  				<LI>
  					<STRONG>102</STRONG>
  				: Invalid folder name.
  				<LI>
  					<STRONG>103</STRONG>
  				: You have no permissions to create the folder.
  				<LI>
  					<STRONG>110</STRONG> : Unknown error creating folder.</LI></UL>
  		</UL>
  		<P><STRONG>FileUpload<BR>
  			</STRONG>Adds a file in a folder.</P>
  		<P>This is a special command that doesn't require a XML response. A common 
  			"multipart/form-data" post goes&nbsp;with the request. The posted file is named 
  			"<STRONG>NewFile</STRONG>".</P>
  		<P>In the case a file with the same name already exists, the Connector must 
  			automatically rename it adding a&nbsp;progressive number&nbsp;suffix. For 
  			example, if the posted file is named "Test.doc", the names to be used, in 
  			order, are: "Test(1).doc", "Test(2).doc", Test(3).doc"... and so on.</P>
  		<P>Sample Request:</P>
  		<CODE>connector.ext?Command=<STRONG>FileUpload</STRONG>&amp;Type=<STRONG>File</STRONG>&amp;CurrentFolder=<STRONG>/Samples/Docs/</STRONG></CODE>
  		<P>Sample Response (Simple HTML):</P>
  		<CODE>&lt;script type="text/javascript"&gt;<BR>
  			window.parent.frames['frmUpload'].OnUploadCompleted(<STRONG>0</STRONG>) ;<BR>
  			&lt;/script&gt;</CODE>
  		<p>The "OnUploadCompleted" is a JavaScript function that is called to expose the 
  			upload result. The possible values are:</p>
  		<UL>
  			<UL>
  				<LI>
  					OnUploadCompleted( <STRONG>0</STRONG>
  				) : no errors found on the upload process.
  				<LI>
  					OnUploadCompleted( <STRONG>201, 'FileName(1).ext'</STRONG>
  				) : the file has been uploaded successfully, but it's name has been changed to 
  				"FileName(1).ext".
  				<LI>
  					OnUploadCompleted( <STRONG>202</STRONG> ) : invalid file.</LI></UL>
  		</UL>
  		<H3>Configuring the Connector</H3>
  		<P>All connectors available in the editor package can be found at the following 
  			folder: "editor/filemanager/browser/default/connectors". Each server side 
  			language has its own folder there, with the Connector file inside it. To choose 
  			witch connector to use, the end-user just go to the configuration file and 
  			modify the following key (in this case for the Link Dialog box):</P>
  		<P>FCKConfig.<STRONG>LinkBrowserURL</STRONG> = FCKConfig.BasePath + 
  			"filemanager/browser/default/browser.html?Connector=<STRONG>connectors/aspx/connector.aspx</STRONG>" 
  			;</P>
  		<P>The Connector path is relative to the "editor/filemanager/browser/default" 
  			folder. The user could even written his custom Connector and point the <STRONG>LinkBrowserURL</STRONG>
  			to it, like "?Connector=/<STRONG>MyFolder/MyConnector.php</STRONG>" for 
  			example.</P>
  		<HR width="100%" SIZE="1">
  		<H2 id="Samples">Samples</H2>
  		<P>The easiest way to the end user to understand how to use the editor is to see it 
  			in action. So it's important to make available samples that clearly show how to 
  			use it.</P>
  		<P>The developers are invited to create samples similar to that available for the 
  			Javascript Integration Pack. Please take a look at the <STRONG>_samples/html</STRONG>
  			folder. All files must be put together in a&nbsp;folder under the _samples 
  			folder.</P>
  		<P>All samples should post the posted data to a single page that shows that data. 
  			The Javascript integration module use an ASP file, called <STRONG>sampleposteddata.asp</STRONG>,&nbsp;that 
  			does&nbsp;that (just because it doesn't go on server side). That file can be 
  			used as a reference for a custom implementation. Please use the same file name, 
  			like sampleposteddata.ext.</P>
  		<HR width="100%" SIZE="1">
  		<H2 id="Documentation">Documentation</H2>
  		<P>[ Documentation not yet available ]</P>
  		</STRONG>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_documentation/Developers/images
                        FileBrowserConnector.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_documentation/Developers/images/FileBrowserConnector.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:20

  Added:       util/fckeditor/_documentation Performance.html WhatsNew.html
                        fck_docs.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_documentation/Performance.html
  
  Index: Performance.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-28 18:25:58
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title></title>
  	</head>
  	<body>
  		<H1>Performance</H1>
  		<P>End users who need to work with FCKeditor want the most short loading and 
  			response time from it. They want to start reading and editing the content 
  			quickly. This is a big problem&nbsp;for almost all on-line&nbsp;text editors. 
  			There are many files that have to be downloaded from the server to make the 
  			editor work:</P>
  		<UL>
  			<LI>
  			The called page and all images and scripts not related to the editor.
  			<LI>
  			If using Javascript integration, the JS file with the scripts to create the 
  			editor
  			<LI>
  			The page that works as the editor area (it's loaded in a IFrame)
  			<LI>
  			All the JS files with the scripts for the editor engine (more than 10 for 
  			version 1.x)
  			<LI>
  			The language file
  			<LI>
  			The editor's skin files
  			<LI>
  				All images that are used as the toolbar buttons (every button has it's own 
  				image)</LI></UL>
  		<P>All these calls generate a lot of work and traffic throw the client's browser 
  			and the server. And worth, as many files are called, even if small 
  			size,&nbsp;as much time to wait.</P>
  		<P>Two solutions have been developed for version 2.0 to solve this problem: 
  			accurate loading order and scripts compression.</P>
  		<H2>Loading Order</H2>
  		<P>From version 2.0, the editor separe it's loading into steps:</P>
  		<UL>
  			<LI>
  			The called page (that holds the editor) and the script to&nbsp;loaded the 
  			editor is loaded.
  			<LI>
  			The basic scripts to create the editor are loaded
  			<LI>
  			The editor's skin and language files&nbsp;are loaded
  			<LI>
  			The editor is created
  			<LI>
  			The content is loaded in the editor
  			<LI>
  			[ At this point the user can start reading and writing with some limitations 
  			(drag-and-drop is disabled - cut and paste are disabled - the toolbar is 
  			not&nbsp;yet available&nbsp;]
  			<LI>
  			The editor's engine scripts are loaded
  			<LI>
  			The toolbar is created and shown to the user (even if the buttons images are 
  			not yet loaded)
  			<LI>
  			[ At this point the editor has all it's feature&nbsp;enabled&nbsp;]
  			<LI>
  				The toolbar icons are loaded.</LI></UL>
  		<H2>Scripts Compression</H2>
  		<P>The editor's scripts (JS files)&nbsp;are now pre-processed before packing any 
  			new version. This are the processing steps:</P>
  		<UL>
  			<LI>
  			Remove all comments from the code.
  			<LI>
  			Remove all unuseful blank spaces, tabs and carriage returns
  			<LI>
  				Merge the scripts in fewer files.</LI></UL>
  		<P>With this process we can reduce the file sizes&nbsp;up to 50%. Another good 
  			think is that the editor code can now be fully commented (I avoid code 
  			commenting on version 1.x to reduce the files size).</P>
  		<P>The original code will still be available in the package in a folder called 
  			"_source".</P>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_documentation/WhatsNew.html
  
  Index: WhatsNew.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <HTML>
  	<HEAD>
  		<TITLE>FCKeditor - What's New</TITLE></HEAD>
  	<BODY>
  		<H3>Version 2.0 Beta 2</H3>
  		<UL>
  			<LI>
  				There is a new configuration - "<STRONG>GeckoUseSPAN</STRONG>" - that can 
  			be used to tell Gecko browsers to use &lt;SPAN style...&gt; or &lt;B&gt;, 
  			&lt;I&gt; and &lt;U&gt; for the bold, italic and underline commands.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1002622&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-1002622</A>] New <STRONG>Text Color</STRONG> and&nbsp;<STRONG>Background 
  					Color</STRONG>
  			&nbsp;commands have been added to the editor.
  			<LI>
  			On Gecko browsers, a message is shown when,&nbsp;because of&nbsp;security 
  			settings,&nbsp;the user&nbsp;is not able to&nbsp;cut, copy or paste data from 
  			the clipboard using the toolbar buttons or the context menu.
  			<LI>
  				The new "<STRONG>Paste as Plain Text</STRONG>
  			" command has been introduced.
  			<LI>
  				The new "<STRONG>Paste from Word</STRONG>
  			" command has been introduced.
  			<LI>
  			A new configuration named&nbsp;"StartupFocus" can be used to tell the editor to 
  			get the focus when the page is loaded.
  			<LI>
  				All <STRONG>Java </STRONG>
  			integration files has been moved to a new separated package.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1016781&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-1016781</A>] <STRONG>Table operations</STRONG> are 
  				now working when right click inside a table. The following commands has been 
  				introduced: <STRONG>Insert Row</STRONG>, <STRONG>Delete Row</STRONG>, <STRONG>Insert 
  					Column</STRONG>, <STRONG>Delete Column</STRONG>, <STRONG>Insert Cell</STRONG>
  				and <STRONG>Delete Cells</STRONG>
  			.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=965067&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-965067</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1010379&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-1010379</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=977713&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-977713</A>] XHTML support was not working with 
  			FireFox, blocking the editor when submitting data. It has been fixed.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1007547&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-1007547</A> ] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=974595&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-974595</A>
  			]&nbsp;The "FCKLang not defined" error when loading has been fixed.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1021028&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-1021028</A>] If the editor doesn't have the 
  			focus, some commands were been executed outside the editor in the place where 
  			the focus is. It has been fixed.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=981191&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-981191</A>] We are now using &lt;!--- ---&gt; for 
  				ColdFusion comments.</LI></UL>
  		<H3>Version 2.0 Beta 1</H3>
  		<P>This is the first beta of the 2.x series. It brings a lot of new and important 
  			things. Beta versions will be released until all features available on version 
  			1.x will be introduced in the 2.0.<BR>
  			<BR>
  			<STRONG>Note:</STRONG> As it is a beta, it is not yet completely developed. 
  			Future versions can bring new features that can break backward compatibility 
  			with this version.
  		</P>
  		<UL>
  			<LI>
  				Gecko browsers (<STRONG>Mozilla</STRONG> and <STRONG>Netscape</STRONG>) 
  			support.
  			<LI>
  				<STRONG>Quick startup</STRONG>
  			response times.
  			<LI>
  				Complete <STRONG>XHTML</STRONG>
  			1.0 support.
  			<LI>
  				<STRONG>Advanced link</STRONG> dialog box:
  				<UL>
  					<LI>
  					Target selection.
  					<LI>
  					Popup configurator.
  					<LI>
  					E-Mail link.
  					<LI>
  						Anchor selector.
  					</LI>
  				</UL>
  			<LI>
  				New <STRONG>File Manager</STRONG>.
  			<LI>
  				New dialog box system, with <STRONG>tabbed dialogs</STRONG>
  			support.
  			<LI>
  				New <STRONG>context menus</STRONG>
  			with icons.
  			<LI>
  			New toolbar with "expand/collapse" feature.
  			<LI>
  				<STRONG>Skins</STRONG>
  			support.
  			<LI>
  				<STRONG>Right to left languages</STRONG> support.
  			</LI>
  		</UL>
  		<H3>Version 1.6.1</H3>
  		<UL>
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=862364&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-862364</A>] [<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=812733&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-812733</A>] There was a problem when the user 
  			tried to delete the last row, collumn or cell in a table. It has been 
  			corrected.*
  			<LI>
  			New Estonian language file. Thanks to Kristjan Kivikangur
  			<LI>
  			New Croatian language file. Thanks to Alex Varga.
  			<LI>
  			Updated language file for Czech. Thanks to Plachow.
  			<LI>
  			Updated language file for Chineze (zh-cn). Thanks to Yanglin.
  			<LI>
  				Updated language file for Catalan. Thanks to Jordi Cerdan.</LI></UL>
  		<P>* This version has been partially sponsored by <A href="http://www.genuitec.com/">Genuitec, 
  				LLC</A>.</P>
  		<H3>Version 1.6</H3>
  		<UL>
  			<LI>
  				<STRONG>Context Menu</STRONG> support for <STRONG>form</STRONG>
  			elements.*
  			<LI>
  				New <STRONG>"Selection Field" command</STRONG>
  			with advanced dialog box for options definitions.*
  			<LI>
  				New <STRONG>"Image Button" command</STRONG>
  			is available.*
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936196&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-936196</A>] Many form elements <STRONG>bugs has been 
  					fixed</STRONG> and <STRONG>many improvements</STRONG>
  			has been done.*
  			<LI>
  				New <STRONG>Java Integration Module</STRONG>. There is a complete Java API 
  			and Tag Library implementations. Take a look at the _jsp directory. Thanks to 
  			Simone Chiaretta and Hao Jiang.
  			<LI>
  				The <STRONG>Word Spell Checker</STRONG>
  			can be used. To be able to run it, your browser security configuration 
  			"Initialize and script ActiveX controls not marked as safe" must be set to 
  			"Enable" or "Prompt". And easier and more secure way to do that is to add your 
  			site in the list of trusted sites. IeSpell can still be used. Take a look at 
  			the fck_config.js file for some configuration options. Thanks to EdwardRF.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=748807&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-748807</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=801030&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-801030</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=880684&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-880684</A>] New "<STRONG>Anchor" command</STRONG>, 
  			including context menu support. Thanks to G.Meijer.
  			<LI>
  			Special characters are replaced with their decimal HTML entities when the XHMTL 
  			support is enabled (only over IE5.5+).
  			<LI>
  				New <STRONG>Office 2003 Style</STRONG> toolbar icons are available. Just 
  				uncomment the config.ToolbarImagesPath key in the fck_config.js file. Thanks to 
  				Abdul-Aziz A. Al-Oraij. <STRONG>Attention</STRONG>: the default toolbar 
  			items have been moved to the "images/toolbar/default" directory.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=934566&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-934566</A>] <STRONG>Double click support</STRONG>
  			for Images, Tables, Links, Anchors and all Form elements. Thanks to Top Man.
  			<LI>
  				New <STRONG>"New Page" command</STRONG>
  			to start a typing from scratch. Thanks to Abdul-Aziz A. Al-Oraij.
  			<LI>
  				New <STRONG>"Replace" command</STRONG>. Thanks to Abdul-Aziz A. Al-Oraij.
  			<LI>
  				New <STRONG>"Advanced Font Style" command</STRONG>. Thanks to Abdul-Aziz A. 
  			Al-Oraij.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=738193&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-738193</A>] New <STRONG>"Save" command</STRONG>. 
  			It can be used to simulate a save action, but in fact it just submits the form 
  			where the editor is placed in. Thanks to Abdul-Aziz A. Al-Oraij.
  			<LI>
  				New <STRONG>"Universal Keyboard" command</STRONG>. This 22 charsets are 
  			available: Arabic, Belarusian, Bulgarian, Croatian, Czech, Danish, Finnish, 
  			French, Greek, Hebrew, Hungarian, Diacritical, Macedonian, Norwegian, Polish, 
  			Russian, Serbian (Cyrillic), Serbian (Latin), Slovak, Spanish, Ukrainian and 
  			Vietnamese. Includes a keystroke listener to type Arabic on none Arabic OS or 
  			machine. Thanks to Abdul-Aziz A. Al-Oraij.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935358&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-935358</A>] New <STRONG>"Preview" command</STRONG>. 
  			Context menu option is included and can be deactivated throw the 
  			config.ShowPreviewContextMenu configuration. Thanks to Ben Ramsey.
  			<LI>
  				New "<STRONG>Table Auto Format</STRONG>" context menu command. Hack a 
  			little the fck_config.js and the fck_editorarea.css files. Thanks to Alexandros 
  			Lezos.
  			<LI>
  				New "<STRONG>Bulleted List Properties</STRONG>
  			" context menu to define its type and class. Thanks to Alexandros Lezos.
  			<LI>
  				The <STRONG>image dialog</STRONG> box has been a <STRONG>redesigned</STRONG>
  			. Thanks to Mark Fierling.
  			<LI>
  				Images now always have the <STRONG>"alt" attribute</STRONG>
  			set, even when it's value is empty. Thanks to Andreas Barnet.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=942250&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-942250</A>] You can set on fck_config.js to <STRONG>automatically 
  					clean Word</STRONG>
  			pasting operations without a user confirmation.
  			<LI>
  			Forms element dialogs and other localization pending labels has been updated.
  			<LI>
  				A new <STRONG>Lithuanian</STRONG>
  			language file is available. Thanks to Tauras Paliulis.
  			<LI>
  				A new <STRONG>Hebrew</STRONG>
  			language file is available. Thanks to Ophir Radnitz.
  			<LI>
  				A new <STRONG>Serbian</STRONG>
  			language file is available. Thanks to Zoran Subic.
  			<LI>
  				<STRONG>Danish</STRONG>
  			language file updates. Thanks to Flemming Jensen.
  			<LI>
  				<STRONG>Catalan</STRONG>
  			language file updates. Thanks to Jordi Cerdan.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=936514&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-936514</A>] [<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=918716&amp;group_id=75348">SF 
  					BUG-918716</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=931037&amp;group_id=75348&amp;atid=543653">SF 
  					BUG-931037</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=865864&amp;group_id=75348&amp;atid=543653">SF 
  					BUG-865864</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=915410&amp;group_id=75348&amp;atid=543653">SF 
  					BUG-915410</A>] [<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918716&amp;group_id=75348&amp;atid=543653">SF 
  					BUG-918716</A>] Some <STRONG>languages files</STRONG> were not saved on <STRONG>
  					UTF-8</STRONG>
  			format causing some javascript errors on loading the editor or making 
  			"undefined" to show on editor labels. This problem was solved.
  			<LI>
  			Updates on the testsubmit.php file. Thanks to Geat and Gabriel Schillaci
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=924620&amp;group_id=75348">SF 
  					BUG-924620</A>] There was a problem when setting a name to an editor 
  				instance when the name is used by another tag. For example when using 
  				"description" as the name in a page with the &lt;META name="<SPAN lang="EN-GB" style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-GB; mso-fareast-language: IT; mso-bidi-language: AR-SA">description"&gt; tag.
  			<LI>
  						[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=935018&amp;group_id=75348&amp;atid=543653">SF 
  							BUG-935018</A>] The "buletted" typo has been corrected.
  			<LI>
  						[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=902122&amp;group_id=75348&amp;atid=543653">SF 
  							BUG-902122</A>] Wrong css and js file references have been corrected.
  			<LI>
  						[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=918942&amp;group_id=75348&amp;atid=543653">SF 
  							BUG-918942</A>] All dialog boxes now accept Enter and Escape keys as Ok and 
  						Cancel buttons.</LI></UL>
  		<P>* This version has been partially sponsored by <A href="http://www.genuitec.com/">Genuitec, 
  				LLC</A>.</P>
  		<H3>Version 1.5</H3>
  		<UL>
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348"
  					target="_blank">SF Feature-913777</A>] <STRONG>New Form Commands</STRONG>
  			are now available! Special thanks to G.Meijer.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=861149&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-861149</A>] <STRONG>Print Command</STRONG>
  			is now available!
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=743546&amp;group_id=75348"
  					target="_blank">SF BUG-743546</A>] The <STRONG>XHTML content duplication 
  					problem </STRONG>has been <STRONG>solved</STRONG>
  			. Thanks to Paul Hutchison.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=875853&amp;group_id=75348"
  					target="_blank">SF BUG-875853</A>] The <STRONG>image dialog box</STRONG>
  			now gives precedence for width and height values set as styles. In this way a 
  			user can change the size of the image directly inside the editor and the 
  			changes will be reflected in the dialog box.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543656&amp;aid=913777&amp;group_id=75348"
  					target="_blank">SF Feature-788368</A>] The sample <STRONG>file upload </STRONG>
  				manager for ASPX now uses <STRONG>guids</STRONG>
  			for the file name generation. In this way a support XML file is not needed 
  			anymore.
  			<LI>
  				It's possible now to <STRONG>programmatically change the Base Path</STRONG> of 
  				the editor if it's installed in a directory different of "/FCKeditor/". 
  				Something like this:<BR>
  				oFCKeditor.BasePath = '/FCKeditor/' ;<BR>
  			Take a look at the _test directory for samples.
  			<LI>
  			There was a little bug in the TAB feature that moved the insertion point if 
  			there were any object (images, tables) in the content. It has been fixed.
  			<LI>
  				The problem with <STRONG>accented and international characters</STRONG>
  			on the PHP test page was solved.
  			<LI>
  				A new <STRONG>Chinese (Taiwan)</STRONG>
  			language file is available. Thanks to Nil.
  			<LI>
  				A new <STRONG>Slovenian</STRONG>
  			language file is available. Thanks to Pavel Rotar.
  			<LI>
  				A new <STRONG>Catalan</STRONG>
  			language file is available. Thanks to Jordi Cerdan.
  			<LI>
  				A new <STRONG>Arabic</STRONG>
  			language file is available. Thanks to Abdul-Aziz A. Al-Oraij.
  			<LI>
  				Small corrections on the <STRONG>Norwegian</STRONG>
  			language file.
  			<LI>
  			A Java version for the test results (testsubmit.jsp) is now available. Thanks 
  			to Pritpal Dhaliwal.
  			<LI>
  			When using Javascript to create a editor instance it's possible now to easily 
  			get the editor's value calling oFCKeditor.GetValue() (eg.). Better Javascript 
  			API interfaces will be available on version 2.0.
  			<LI>
  				If <STRONG>XHTML</STRONG>
  			is enabled the editor cleans the HTML before showing it on the Source View, so 
  			the exact result can be viewed by the user. This option can be activated 
  			setting config.EnableSourceXHTML = true in the fck_config.js file.
  			<LI>
  				The <STRONG>JS integration object</STRONG> now escapes all configuration 
  				settings, in this way a user can use <STRONG>reserved chars</STRONG> on it. For 
  				example:
  				<BR>
  			oFCKeditor.Config["ImageBrowserURL"] = 
  			'/imgs/browse.asp?filter=abc*.jpg&amp;userid=1';
  			<LI>
  				A minimal browse server sample is now available in ASP. Thanks to Andreas 
  				Barnet.
  			</LI>
  		</UL>
  		<H3>Version 1.4</H3>
  		<UL>
  			<LI>
  				<STRONG>ATTENTION: For PHP users</STRONG>: The editor was changed and now uses <STRONG>
  					htmlspecialchars</STRONG> instead of <STRONG>htmlentities</STRONG>
  			when handling the initial value. It should works well, but please make some 
  			tests before upgrading definitively. If there is any problem just uncomment the 
  			line in the fckeditor.php file (and send me a message!).
  			<LI>
  				The editor is now integrated with <STRONG>ieSpell</STRONG> (<A href="http://www.iespell.com">http://www.iespell.com</A>) 
  				for <STRONG>Spell Checking</STRONG>. You can configure the download URL in 
  			then fck_config.js file. Thanks to Sanjay Sharma. (ieSpell is free for personal 
  			use but must be paid for commercial use)
  			<LI>
  				<STRONG>Table</STRONG> and <STRONG>table cell</STRONG> dialogs has been 
  				changed. Now you can <STRONG>select the class</STRONG>
  			you want to be applied. Thanks to Alexander Lezos.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=865378&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-865378</A>]A new <STRONG>upload support is available 
  					for ASP</STRONG>. It uses the /UserImages/ folder in the root of the 
  			web site as the files container and a counter controlled by the upload.cnt 
  			file. Both must have write permissions set to the IUSR_xxx user. Thanks to Trax 
  			and Juanjo.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=798128&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-798128</A>] The user (programmer) can now define a <STRONG>
  					custom separator</STRONG>
  			for the list items of a combo in the toolbar. Thanks to Wulff D. Heiss.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=741963&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-741963</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=878941&amp;group_id=75348&amp;atid=543656"
  					target="_blank">SF Feature-878941</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=869389&amp;group_id=75348&amp;atid=543655"
  					target="_blank">SF Patch-869389</A>] A minimal support for a fake <STRONG>TAB 
  					is now available</STRONG>, even if HTML has no support for TAB. Now 
  			when the user presses the TAB key a configurable number of spaces (&amp;nbsp;) 
  			is added. Take a look at config.TabSpaces on the fck_config.js file. No action 
  			is performed if it is set to zero. The default value is 4. Thanks to Phil 
  			Hassey.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-782779</A>][<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=790939&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-790939</A>] The problem with big images has been 
  			corrected. Thanks to Raver.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348"
  					target="_blank">SF BUG-862975</A>] Now the editor does nothing if no 
  			image is selected in the image dialog box and the OK button is hit.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=851609&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-851609</A>] The problem with ASP and null values 
  			has been solved.
  			<LI>
  				<STRONG>Norwegean</STRONG>
  			language pack. Thanks to Martin Kronstad.
  			<LI>
  				<STRONG>Hungarian</STRONG>
  			language pack. Thanks to Balzs Szab.
  			<LI>
  				<STRONG>Bosnian</STRONG>
  			language pack. Thanks to Trax.
  			<LI>
  				<STRONG>Japanese</STRONG>
  			language pack. Thanks to Kato Yuichiro.
  			<LI>
  				Updates on the <STRONG>Polish</STRONG>
  			language pack. Thanks to Norbert Neubauer.
  			<LI>
  				The <STRONG>Chinese (Taiwan)</STRONG> (zh-tw) has been removed from the package 
  				because it's corrupt. I'm sorry. I hope someone could send me a good version 
  				soon.
  			</LI>
  		</UL>
  		<H3>Version 1.3.1</H3>
  		<UL>
  			<LI>
  				It's now possible to configure the editor the insert a <STRONG>&lt;BR&gt; tag 
  					instead of &lt;P&gt;</STRONG> when the user presses the <STRONG>&lt;Enter&gt;</STRONG>
  				key. Take a look at the fck_config.js configuration file for the "<STRONG>UseBROnCarriageReturn</STRONG>" 
  			key. This option is disabled by default.
  			<LI>
  				<STRONG>Icelandic</STRONG>
  			language pack. Thanks to Andri skarsson.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853374&amp;group_id=75348">SF 
  					BUG-853374</A>] On IE 5.0 there was a little error introduced with 
  			version 1.3 on initialization. It was corrected.
  			<LI>
  				[<A href="https://sourceforge.net/tracker/?func=detail&amp;atid=543653&amp;aid=853372&amp;group_id=75348">SF 
  					BUG-853372</A>] On IE 5.0 there was a little error introduced with 
  			version 1.3 when setting the focus in the editor. It was corrected.
  			<LI>
  				Minor errors on the language file for <STRONG>english</STRONG>
  			has been corrected. Thanks to Anders Madsen.
  			<LI>
  				Minor errors on the language file for <STRONG>danish</STRONG> has been 
  				corrected. Thanks to Martin Johansen.
  			</LI>
  		</UL>
  		<H3>Version 1.3</H3>
  		<UL>
  			<LI>
  				Language support for <STRONG>Danish, Polish, Simple Chinese, Slovak, Swedish and 
  					Turkish</STRONG>.
  			<LI>
  				Language updates for <STRONG>Romanian</STRONG>.
  			<LI>
  				It's now possible to <STRONG>override</STRONG> any of the <STRONG>editor's 
  					configurations</STRONG>
  			(for now it's implemented just for JavaScript, ASPX and HTC modules). See 
  			_test/test.html for a sample. I'm now waiting for the Community for the ASP, 
  			CFM and PHP versions.
  			<LI>
  				A new method is available for <STRONG>PHP</STRONG> users. It's called <STRONG>ReturnFCKeditor</STRONG>. 
  				It works exactly like CreateFCKeditor, but it <STRONG>returns a string with the 
  					HTML</STRONG>
  			for the editor instead of output it (echo). This feature is useful for people 
  			who are working with Smarty Templates or something like that. Thanks to Timothy 
  			J. Finucane.
  			<LI>
  				Many people have had problems with <STRONG>international characters</STRONG> over
  				<STRONG>PHP</STRONG>. I had also the same problem. PHP have strange problems 
  				with character encoding. The code hasn't been changed but just saved again with 
  				Western European encoding. <STRONG>Now it works well</STRONG> in my system.<BR>
  			Take a look also at the "default_charset" configuration option at the php.ini 
  			file. It doesn't seem to be an editor's problem but a PHP issue.
  			<LI>
  				The "<STRONG>testsubmit.php</STRONG>" file now strips the "<STRONG>Magic Quotes</STRONG>
  			" that are automatically added by PHP on form posts.
  			<LI>
  				A <STRONG>new language</STRONG> integration module is available for <STRONG>ASP/Jscript</STRONG>. 
  			Thanks to Dimiter Naydenov.
  			<LI>
  				<STRONG>New configuration</STRONG> options are available to <STRONG>customize the 
  					Target</STRONG> combo box in the <STRONG>Insert/Modify Link</STRONG>
  			dialog box. Now you can hide it, or set which options are available in the 
  			combo box. Take a look at the fck_config.js file.
  			<LI>
  				The <STRONG>Text as Plain Text</STRONG> toolbar <STRONG>icon</STRONG> has been 
  				changed <STRONG>to avoid confusion</STRONG>
  			with the Normal Paste or. Thanks to Kaupo Kalda.
  			<LI>
  				The file <STRONG>dhtmled.cab has been removed</STRONG>
  			from the package. It's not needed to the editor to work and caused some 
  			confusion for a few users.
  			<LI>
  				The <STRONG>editor's content</STRONG> now <STRONG>doesn't loose the focus</STRONG>
  			when the user clicks with the mouse in a toolbar button.
  			<LI>
  				On <STRONG>drag-and-drop</STRONG> operations the data to be inserted in the 
  				editor is now <STRONG>converted to plain text</STRONG> when the "<STRONG>ForcePasteAsPlainText</STRONG>" 
  				configuration is set to <STRONG>true</STRONG>.
  			<LI>
  				The <STRONG>image browser</STRONG> sample in PHP now <STRONG>sorts the files</STRONG>
  			by name. Thanks to Sergey Lupashko.
  			<LI>
  				Two <STRONG>new configuration</STRONG> options are available to <STRONG>turn on/off 
  					by default</STRONG> the "<STRONG>Show Borders</STRONG>" and "<STRONG>Show 
  					Details</STRONG>" commands.
  			<LI>
  				Some <STRONG>characters have been removed</STRONG> from the "<STRONG>Insert Special 
  					Chars</STRONG>" dialog box because they were causing encoding problems 
  			in some languages. Thanks to Abomb Hua.
  			<LI>
  				<STRONG>JSP</STRONG> versions of the <STRONG>image and file upload and browsing</STRONG>
  				features. Thanks to Simone Chiaretta.</LI></UL>
  		<H3>Version 1.2.4</H3>
  		<UL>
  			<LI>
  				Language support for <STRONG>Spanish, Finnish, Romanian and Korean</STRONG>.
  			<LI>
  				Language updates for <STRONG>German</STRONG>.
  			<LI>
  				New <STRONG>Zoom</STRONG> toolbar option. (<A href="https://sourceforge.net/forum/forum.php?thread_id=904116&amp;forum_id=257180">Thanks 
  					to "mtn_roadie"</A>)</LI></UL>
  		<H3>Version 1.2.2</H3>
  		<UL>
  			<LI>
  				Language support for <STRONG>French</STRONG>.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=782779&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-782779</A>] Version 1.2 introduced a bug on the 
  				image dialog window: when changing the image, no update was done. This bug is 
  				now fixed.
  			</LI>
  		</UL>
  		<H3>Version 1.2</H3>
  		<UL>
  			<LI>
  				Enhancements to the <STRONG>Word cleaning</STRONG>
  			feature (Thanks to Karl von Randow).
  			<LI>
  				The <STRONG>Table dialog box</STRONG>
  			now handles the Style width and height set in the table (Thanks to Roberto 
  			Arruda). There where many problems on prior version when people changed 
  			manually the table's size, dragging the size handles, and then it was not 
  			possible to set a new size using the table dialog box.
  			<LI>
  				For the <STRONG>Image dialog box:</STRONG>
  				<UL>
  					<LI>
  					No image is shown in the preview pane if no image has been set.
  					<LI>
  						If no HSpace is set in the image a "-1" value was shown in the dialog box. Now, 
  						nothing is shown if the value is negative.
  					</LI>
  				</UL>
  			<LI>
  				[<A href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=739630&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-739630</A>] Image with link lost the link when 
  			changing its properties. The problem is solved.
  			<LI>
  				Due to some problems in the XHTML cleaning (content duplication when the source 
  				HTML is dirty and malformed), the <STRONG>XHTML support is turned off by default</STRONG>
  			from this version. You can still change this behavior and turn it on in the 
  			configuration file.
  			<LI>
  				Some little updates on the <STRONG>English </STRONG>
  			language file.
  			<LI>
  			A few addition of missing entries on all languages files (translations for 
  			these changes are pending).
  			<LI>
  				Language files has been added for the following languages:
  				<UL>
  					<LI>
  						<STRONG>Brazilian Portuguese</STRONG>
  					(pt-br)
  					<LI>
  						<STRONG>Czech</STRONG>
  					(cz)
  					<LI>
  						<STRONG>Dutch</STRONG>
  					(nl)
  					<LI>
  						<STRONG>Russian</STRONG>
  					(ru)
  					<LI>
  						<STRONG>Chinese (Taiwan)</STRONG>
  					(zh-tw)
  					<LI>
  						<STRONG>Greek</STRONG>
  					(gr)
  					<LI>
  						<STRONG>German</STRONG> (de)</LI></UL>
  			</LI>
  		</UL>
  		<H3>Version 1.1</H3>
  		<UL>
  			<LI>
  				The "<STRONG>Multi Language</STRONG>" system is now available. This version 
  				ships with English and Italian versions completed. Other languages will be 
  				available soon. The editor automatically detects the client language and sets 
  				all labels, tooltips and dialog boxes to it, if available. The auto detection 
  				and the default language can be set in the <STRONG>fck_config.file</STRONG>.
  			<LI>
  				Two files can now be created to isolate customizations code from the original 
  				source code of the editor: <STRONG>fckeditor.config.js</STRONG> and <STRONG>fckeditor.custom.js</STRONG>. 
  			Create these files in the root folder of your web site, if needed. The first 
  			one can be used to add or override configurations set on fck_config.js. The 
  			second one is used for custom actions and behaviors.
  			<LI>
  			A problem with relative links and images like "/test/test.doc" has been solved. 
  			In prior versions, only with XHTML support enabled, the URL was changed to 
  			something like "http://www.mysite.xxx/test/test.doc" (The domain was 
  			automatically added). Now the XHTML cleaning procedure gets the URLs exactly 
  			how they are defined in the editors HTML.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=742168&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-742168</A>] Mouse drag and drop from toolbar 
  			buttons has been disabled.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=768210&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-768210</A>] HTML entities, like <STRONG>&amp;lt;</STRONG>, 
  			were not load correctly. The problem is solved.
  			<LI>
  				[<A href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=748812&amp;group_id=75348&amp;atid=543653"
  					target="_blank">SF BUG-748812</A>] The link dialog window doesn't open when 
  				the link button is grayed.
  			</LI>
  		</UL>
  		<H3>Version 1.0</H3>
  		<UL>
  			<LI>
  			Three new options are available in the configuration file to set what file 
  			types are allowed / denied to be uploaded from the "Insert Link" and "Insert 
  			Image" dialog boxes.
  			<LI>
  			Upload options, for links and images, are automatically hidden on IE 5.0 
  			browsers (it's not compatible).
  			<LI>
  			[SF BUG-734894] Fixed a problem on XHTML cleaning: the value on INPUT fields 
  			were lost.
  			<LI>
  			[SF BUG-713797] Fixed some image dialog errors when trying to set image 
  			properties when no image is available.
  			<LI>
  			[SF BUG-736414] Developed a workaround for a DHTML control bug when loading in 
  			the editor some HTML started with &lt;p&gt;&lt;hr&gt;&lt;/p&gt;.
  			<LI>
  			[SF BUG-737143] Paste from Word cleaning changed to solve some IE 5.0 errors. 
  			This feature is still not available over IE 5.0.
  			<LI>
  			[SF BUG-737233] CSS mappings are now OK on the PHP image browser module.
  			<LI>
  			[SF BUG-737495] The image preview in the image dialog box is now working 
  			correctly.
  			<LI>
  			[SF BUG-737532] The editor automatically switches to WYSIWYG mode when the form 
  			is posted.
  			<LI>
  				[SF BUG-739571] The editor is now working well over Opera (as for Netscape, a 
  				TEXTAREA is shown).
  			</LI>
  		</UL>
  		<H3>Version 1.0 Final Candidate</H3>
  		<UL>
  			<LI>
  			A new dialog box for the "Link" command is available. Now you can upload and 
  			browse the server exactly like the image dialog box. It's also possible to 
  			define the link title and target window (_blank, _self, _parent and _top). As 
  			with the image dialog box, a sample (and simple) file server browser is 
  			available.
  			<LI>
  			A new configuration option is available to force every paste action to be 
  			handled as plain text. See "config.ForcePasteAsPlainText" in fck_config.js.
  			<LI>
  			A new Toolbar button is available: "Paste from Word". It automatically cleans 
  			the clipboard content before pasting (removesWord styles, classes, xml stuff, 
  			etc...). This command is available for IE 5.5 and more. For IE 5.0 users, a 
  			message is displayed advising that the text will not be cleaned before pasting.
  			<LI>
  			The editor automatically detects Word clipboard data on pasting operations and 
  			asks the user to clean it before pasting. This option is turned on by default 
  			but it can be configured. See "config.AutoDetectPasteFromWord" in 
  			fck_config.js.
  			<LI>
  			Table properties are now available in cells' right click context menu.
  			<LI>
  				It's now possible to edit cells advanced properties from it's right click 
  				context menu.
  			</LI>
  		</UL>
  		<H3>Version 1.0 Release Candidate 1 (RC1)</H3>
  		<UL>
  			<LI>
  			Some performance improvements.
  			<LI>
  			The file dhtmled.cab has been added to the package for clients ho needs to 
  			install the Microsoft DHTML Editor component.
  			<LI>
  			[SF BUG-713952] The format command options are localized, so it depends on the 
  			IE language to work. Until version 0.9.5 it was working only over English IE 
  			browsers. Now the options are load dynamically on the client using the client's 
  			language.
  			<LI>
  			[SF BUG-712103] The style command is localized, so it depends on the IE 
  			language to work. Until version 0.9.5 it was working only over English IE 
  			browsers. Now it configures itself using the client's language.
  			<LI>
  				[SF BUG-726137] On version 0.9.5, some commands (special chars, image, 
  				emoticons, ...) remove the next available character before inserting the 
  				required content even if no selection was made in the editor. Now the editor 
  				replaces only the selected content (if available).
  			</LI>
  		</UL>
  		<H3>Version 0.9.5 beta</H3>
  		<UL>
  			<LI>
  			XHTML support is now available! It can be enabled/disabled in the fck_config.js 
  			file.
  			<LI>
  			"Show Table Borders" option: show borders for tables with borders size set to 
  			zero.
  			<LI>
  			"Show Details" option: show hidden elements (comments, scripts, paragraphs, 
  			line breaks)
  			<LI>
  			IE behavior integration module. Thanks to Daniel Shryock.
  			<LI>
  			"Find" option: to find text in the document.
  			<LI>
  			More performance enhancements.
  			<LI>
  			New testsubmit.php file. Thansk to Jim Michaels.
  			<LI>
  			Two initial PHP upload manager implementations (not working yet). Thanks to 
  			Frederic Tyndiuk and Christian Liljedahl.
  			<LI>
  			Initial PHP image browser implementation (not working yet). Thanks to Frederic 
  			Tyndiuk.
  			<LI>
  				Initial CFM upload manager implementation. Thanks to John Watson.
  			</LI>
  		</UL>
  		<H3>Version 0.9.4 beta</H3>
  		<UL>
  			<LI>
  			ColdFusion module integration is now available! Thanks to John Watson.
  			<LI>
  			"Insert Smiley" toolbar option! Thanks to Fredox. Take a look at fck_config.js 
  			for configuration options.
  			<LI>
  			"Paste as plain text" toolbar option!
  			<LI>
  			Right click support for links (edit / remove).
  			<LI>
  			Buttons now are shown in gray when disabled.
  			<LI>
  			Buttons are shown just when the image is downloaded (no more "red x" while 
  			waiting for it).
  			<LI>
  			The toolbar background color can be set with a CSS style (see fck_editor.css).
  			<LI>
  				Toolbar images have been reviewed:
  				<UL>
  					<LI>
  					Now they are transparent.
  					<LI>
  					No more over...gif for every button (so the editor loads quicker).
  					<LI>
  						Buttons states are controlled with CSS styles. (see fck_editor.css).</LI></UL>
  			<LI>
  			Internet Explorer 5.0 compatibility, except for the image uploading popup.
  			<LI>
  			Optimizations when loading the editor.
  			<LI>
  			[SF BUG-709544] - Toolbar buttons wait for the images to be downloaded to start 
  			watching and responding the user actions (turn buttons on/off when the user 
  			changes position inside the editor).
  			<LI>
  			Javascript integration is now Object Oriented. CreateFCKeditor function is not 
  			available anymore. Take a look in test.html.
  			<LI>
  				Two new configuration options, ImageBrowser and ImageUpload, are available to 
  				turn on and off the image upload and image browsing options in the Image dialog 
  				box. This options can be hidden for a specific editor instance throw specific 
  				URL parameter in the editors IFRAME (upload=true/false&amp;browse=true/false). 
  				All specific language integration modules handle this option. For sample see 
  				the _test directory.
  			</LI>
  		</UL>
  		</SPAN>
  	</BODY>
  </HTML>
  
  
  
  1.1                  siminweb/util/fckeditor/_documentation/fck_docs.css
  
  Index: fck_docs.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-28 18:27:57
   */
  
  body
  {
  	font-size: 1em;
  	font-family: 'Times New Roman';
  }
  
  p
  {
  	margin-left: 20px;
  }
  
  code
  {
  	padding-right: 10px;
  	display: block;
  	padding-left: 10px;
  	padding-bottom: 5px;
  	margin: 10px 20px;
  	padding-top: 5px;
  	background-color: #dcdcdc;
  }
  
  .classPropMeth
  {
  	margin-top: 10px;
  	font-weight: bold;
  	font-size: 0.8em;
  	margin-left: 0px;
  	font-family: 'Courier New' , Monospace;
  }
  
  .paramsDefinition
  {
  	margin-left: 20px;
  }
  
  .classDefinition *
  {
  	margin-top: 0px;
  	margin-bottom: 0px;
  }
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/_documentation/Using Javascript.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_documentation/Using
  
  Index: Javascript.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-28 18:27:57
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Using FCKeditor with JavaScript</title>
  		<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  		<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  		<meta content="VisualStudio.HTML" name="ProgId">
  		<meta content="Microsoft Visual Studio .NET 7.1" name="Originator">
  		<LINK href="../fck_docs.css" type="text/css" rel="stylesheet">
  	</head>
  	<body>
  		<H1>Using FCKeditor with JavaScript</H1>
  		<P>The "JavaScript Integration Module" is the client side option to include 
  			FCKeditor in your web pages. It is quite easy to use and configure.</P>
  		<H3>Step 1</H3>
  		<P>Suppose that the editor is installed in the /FCKeditor/ path of your web site. 
  			The first thing to do is to include the "JavaScript Integration Module" scripts 
  			inside the &lt;HEAD&gt; of your page, just like this:</P>
  		<code>&lt;script type="text/javascript" src="<STRONG>/FCKeditor/fckeditor.js</STRONG>"&gt;&lt;/script&gt;</code>
  		<H3>Step 2</H3>
  		<P>Now the FCKeditor class is available and ready to use. There are two ways to 
  			create an FCKeditor in you page:</P>
  		<P>Method 1:&nbsp;The inline method (preferred): Go to the body of your page, in 
  			the place you want the editor to be (usually inside a form) and place the 
  			following script:</P>
  		<code>&lt;script type="text/javascript"&gt;<BR>
  			&nbsp;&nbsp;<STRONG> var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;<BR>
  				&nbsp;&nbsp;oFCKeditor.Create() ;<BR>
  			</STRONG>&lt;/script&gt;</code>
  		<P>Method 2:&nbsp;The TEXTAREA replacement method: In the "onload" method on your 
  			page, add the following code to replace a existing TEXTAREA in the page:</P>
  		<code>&lt;html&gt;<BR>
  			&nbsp; &lt;head&gt;<BR>
  			&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;<BR>
  			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.onload = function()<BR>
  			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>
  			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>var oFCKeditor = new FCKeditor( 
  				'MyTextarea' ) ;<BR>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oFCKeditor.ReplaceTextarea() ;<BR>
  			</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
  			&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<BR>
  			&nbsp;&nbsp;&lt;/head&gt;<BR>
  			&nbsp; &lt;body&gt;<BR>
  			&nbsp;&nbsp;&nbsp; &lt;textarea id="<STRONG>MyTextarea</STRONG>" 
  			name="MyTextarea"&gt;This is &lt;b&gt;the&lt;/b&gt; initial 
  			value.&lt;/textarea&gt;<BR>
  			&nbsp; &lt;/body&gt;<BR>
  			&lt;/html&gt;</code>
  		<H3>Step 3</H3>
  		<P>The editor is now ready to be used. Just open the page in your browser to see it 
  			at work.</P>
  		<H2>The FCKeditor Class</H2>
  		<P>This is the main class used to create an instance of FCKeditor in a web page.</P>
  		<div class="classDefinition">
  			<P><A href="#Constructor">Constructor</A></P>
  			<P><A href="#Properties">Properties</A></P>
  			<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  				<P><A href="#pInstanceName">InstanceName</A><BR>
  					<A href="#pWidth">Width</A>
  					<BR>
  					<A href="#pHeight">Height</A>
  					<BR>
  					<A href="#pToolbarSet">ToolbarSet</A>
  					<BR>
  					<A href="#pValue">Value</A>
  					<BR>
  					<A href="#pBasePath">BasePath</A>
  					<BR>
  					<A href="#pCheckBrowser">CheckBrowser</A>
  					<BR>
  					<A href="#pDisplayErrors">DisplayErrors</A></P>
  			</BLOCKQUOTE>
  			<P><A href="#Collections">Collections</A></P>
  			<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  				<P><A href="#cConfig">Config</A></P>
  			</BLOCKQUOTE>
  			<P><A href="#Methods">Methods</A></P>
  			<BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
  				<P><A href="#mCreate">Create</A><BR>
  					<A href="#mReplaceTextarea">ReplaceTextarea</A></P>
  			</BLOCKQUOTE>
  		</div>
  		<H3 id="Constructor">Contructor</H3>
  		<P class="classPropMeth">FCKeditor( instanceName[, width, height, toolbarSet, 
  			value] )</P>
  		<P>
  			<TABLE class="paramsDefinition" id="Table1" cellSpacing="0" cellPadding="0" border="0">
  				<TR>
  					<TD>instanceName&nbsp;
  					</TD>
  					<TD>The unique name that represents the editor instance.</TD>
  				</TR>
  				<TR>
  					<TD>width</TD>
  					<TD>the width of the editor in pixels or percents. (Optional, Default: "100%").</TD>
  				</TR>
  				<TR>
  					<TD>height</TD>
  					<TD>the height of the editor in pixels or percents. (Optional, Default: "200").</TD>
  				</TR>
  				<TR>
  					<TD>toolbarSet</TD>
  					<TD>the name of the Toolbar set to use. (Optional, Default: "Default").</TD>
  				</TR>
  				<TR>
  					<TD>value</TD>
  					<TD>the initial value (HTML) of the editor. (Optional)</TD>
  				</TR>
  			</TABLE>
  		</P>
  		<P>Example:</P>
  		<code>var oFCKeditor = new <STRONG>FCKeditor( 'FCKeditor1' )</STRONG> ;</code>
  		<H3 id="Properties">Properties</H3>
  		<P class="classPropMeth" id="pInstanceName">InstanceName</P>
  		<P>The name of the this editor instance.</P>
  		<P class="classPropMeth" id="pWidth">Width</P>
  		<P>The width of the editor in pixels or percent. Numeric values are handled as 
  			pixels.</P>
  		<P>Default Value: "100%"</P>
  		<P>Examples:<BR>
  			<code>oFCKeditor.<STRONG>Width</STRONG> = 400 ; // 400 pixels</code> <code>oFCKeditor.<STRONG>Width</STRONG>
  				= "250" ;&nbsp;// 250 pixels</code> <code>oFCKeditor.<STRONG>Width</STRONG> = 
  				"80%" ; // 80 percent</code>
  		</P>
  		<P class="classPropMeth" id="pHeight">Height</P>
  		<P>The height of the editor in pixels or percent. Numeric values are handled as 
  			pixels.</P>
  		<P>Default Value: "200"</P>
  		<P>Examples:<BR>
  			<code>oFCKeditor.<STRONG>Height</STRONG> = 400 ; // 400 pixels</code> <code>oFCKeditor.<STRONG>Height</STRONG>
  				= "250" ;&nbsp;// 250 pixels</code> <code>oFCKeditor.<STRONG>Height</STRONG> = 
  				"100%" ; // 100 percent</code>
  		</P>
  		<P class="classPropMeth" id="pToolbarSet">
  			ToolbarSet</P>
  		<P>The Toolbar set to use. Refers to the configurations set at the fckconfig.js 
  			file.</P>
  		<P>Default Value: "Default"</P>
  		<P>Example:<BR>
  			<code>oFCKeditor.<STRONG>ToolbarSet</STRONG> = "MyToolbar" ;</code></P>
  		<P class="classPropMeth" id="pValue">Value</P>
  		<P>The initial value (the HTML) to show in the editor at startup.</P>
  		<P>Default Value: &lt;empty&gt;</P>
  		<P>Example:<BR>
  			<code>oFCKeditor.<STRONG>Value</STRONG> = "&lt;h1&gt;Testing&lt;/h1&gt;This is a 
  				&lt;b&gt;sample&lt;/b&gt;." ;</code></P>
  		<P class="classPropMeth" id="pBasePath">
  			BasePath</P>
  		<P>The path used by the editor to find its code base. In other words, the directory 
  			where the editors package has been installed in your site.</P>
  		<P>Default Value: "/fckeditor/"</P>
  		<P>Example:<BR>
  			<code>oFCKeditor.<STRONG>BasePath</STRONG> = "/Components/FCKeditor/" ;</code></P>
  		<P>Remarks:<BR>
  			Avoid using relative paths. It is preferable to set the base path starting from 
  			the root (/). Always finish the path with a slash (/).</P>
  		<P class="classPropMeth" id="pCheckBrowser">
  			CheckBrowser</P>
  		<P>Tells this class instance to check the browser compatibility when rendering the 
  			editor.</P>
  		<P>Default Value: true</P>
  		<P>Example:<BR>
  			<code>oFCKeditor.<STRONG>CheckBrowser</STRONG> = true ;</code></P>
  		<P>Remarks:<BR>
  			&nbsp;This option could be useful if the check was made at the server side.</P>
  		<P class="classPropMeth" id="pDisplayErrors">
  			DisplayErrors</P>
  		<P>Tells this class instance to show error messages on errors while rendering the 
  			editor.</P>
  		<P>Default Value: true</P>
  		<P>Example:<BR>
  			oFCKeditor.<STRONG>DisplayErrors</STRONG> = false ;</CODE></P>
  		<H3 id="Collections">Collections</H3>
  		<P class="classPropMeth" id="cConfig">Config[ key ] = value</P>
  		<P>This collection holds all configurations set in the editor instance.</P>
  		<P>Example:<br>
  			<code>oFCKeditor.<STRONG>Config[ "AutoDetectLanguage" ]</STRONG> =&nbsp;false ;<BR>
  				oFCKeditor.<STRONG>Config[ "DefaultLanguage" ]</STRONG> = "pt-BR" ;</code></P>
  		<H3 id="Methods">Methods</H3>
  		<P class="classPropMeth" id="mCreate">
  			Create()</P>
  		<P>Builds and outputs the editor in the exact place where its called.</P>
  		<P>Example:<BR>
  			<code>oFCKeditor.<STRONG>Create()</STRONG> ;</code></P>
  		<P class="classPropMeth" id="mReplaceTextarea">
  			ReplaceTextarea()</P>
  		<P>Replaces an existing &lt;TEXTAREA&gt; in the page with the FCKeditor instance. 
  			The Textarea must has its ID set to the editor InstanceName.</P>
  		<P>Example:<BR>
  			<code>window.onload = function()<BR>
  				{<BR>
  				var oFCKeditor = new FCKeditor( '<STRONG>MyTextarea</STRONG> ' ) ;<BR>
  				oFCKeditor.<STRONG>ReplaceTextarea()</STRONG> ;<BR>
  				}<BR>
  				...<BR>
  				&lt;textarea id="<STRONG>MyTextarea</STRONG>" name=" MyTextarea"&gt;This is 
  				&lt;b&gt;the&lt;/b&gt; initial value.&lt;/textarea&gt;</code>
  		</P>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/_samples/aspx sample01.aspx
                        sampleposteddata.aspx
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_samples/aspx/sample01.aspx
  
  Index: sample01.aspx
  ===================================================================
  <%@ Page ValidateRequest="false" Language="C#" AutoEventWireup="false" %>
  <%@ Register TagPrefix="fckeditorv2" Namespace="FredCK.FCKeditorV2" Assembly="FredCK.FCKeditorV2" %>
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample01.aspx
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:28:37
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <script runat="server" language="C#">
  	// This sample doesnt use a code behind file to avoid the user to have to compile
  	// the page to run it.
  	protected override void OnLoad(EventArgs e)
  	{
  		// Automatically calculates the editor base path based on the _samples directory.
  		// This is usefull only for these samples. A real application should use something like this:
  		// FCKeditor1.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  		string sPath = Request.Url.AbsolutePath ;
  		int iIndex = sPath.LastIndexOf( "_samples") ;
  		FCKeditor1.BasePath = sPath.Remove( iIndex, sPath.Length - iIndex  ) ;
  	}
  </script>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
  	<HEAD>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css">
  			<script type="text/javascript" src="../../fckeditor.js"></script>
  			<script type="text/javascript">
  
  function FCKeditor_OnComplete( editorInstance )
  {
  	window.status = editorInstance.Description ;
  }
  
  			</script>
  	</HEAD>
  	<body>
  		<h1>FCKeditor - ASP.Net - Sample 1</h1>
  		This sample displays a normal HTML form with an FCKeditor with full features 
  		enabled.
  		<hr>
  		<form action="sampleposteddata.aspx" method="post" target="_blank">
  			<FCKeditorV2:FCKeditor id="FCKeditor1" runat="server" value='This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.'></FCKeditorV2:FCKeditor>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </HTML>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/aspx/sampleposteddata.aspx
  
  Index: sampleposteddata.aspx
  ===================================================================
  <%@ Page ValidateRequest="false" Language="C#" AutoEventWireup="false" %>
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sampleposteddata.aspx
   * 	This page lists the data posted by a form.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<title>FCKeditor - Samples - Posted Data</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css" />
  	</head>
  	<body>
  		<h1>FCKeditor - Samples - Posted Data</h1>
  		This page lists all data posted by the form.
  		<hr>
  		<table width="100%" border="1" cellspacing="0" bordercolor="#999999">
  			<tr style="FONT-WEIGHT: bold; COLOR: #dddddd; BACKGROUND-COLOR: #999999">
  				<td noWrap>Field Name&nbsp;&nbsp;</td>
  				<td>Value</td>
  			</tr>
  			<% foreach ( string sForm in Request.Form ) { %>
  			<tr>
  				<td valign="top" nowrap><b><%=sForm%></b></td>
  				<td width="100%"><%=Server.HtmlEncode( Request.Form[sForm] )%></td>
  			</tr>
  			<% } %>
  		</table>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/_samples/cfm sample01.cfm sample02_mx.cfm
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_samples/cfm/sample01.cfm
  
  Index: sample01.cfm
  ===================================================================
  <!---
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample01.cfm
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:18:38
   * 
   * File Authors:
   * 		Hendrik Kramer (hk@lwd.de)
  --->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  	<title>FCKeditor - Sample</title>
  	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  	<meta name="robots" content="noindex, nofollow">
  	<link href="../sample.css" rel="stylesheet" type="text/css" />
  </head>
  
  <body>
  
  <h1>FCKeditor - ColdFusion - Sample 1</h1>
  
  This sample displays a normal HTML form with a FCKeditor with full features enabled; invoked by a ColdFusion Custom Tag / Module.<br>
  ColdFusion is a registered trademark and product of <a href="http://www.macromedia.com/software/coldfusion/" target="_blank">Macromedia, Inc</a>.
  <hr>
  <form method="POST" action="<cfoutput>#cgi.script_name#</cfoutput>">
  
  <cfmodule
  	template="../../fckeditor.cfm"
  	basePath="/fckeditor/"
  	instanceName="textEditor"
  	value='This is some sample text. You are using <a href="http://fckeditor.net/" target="_blank">FCKeditor</a>.'
  	width="100%"
  	height="200"
  >
  
  <br />
  <input type="submit" value="Submit">
  <br />
  </form>
  
  <cfif isDefined( 'FORM.fieldnames' )>
  	<cfoutput>
  	<style>
  	<!--
  		td, th { font: 11px Verdana, Arial, Helv, Helvetica, "sans-serif"; }
  	-->
  	</style>
  	<table border="1" cellspacing="0" cellpadding="2" bordercolor="darkblue" bordercolordark="darkblue" bordercolorlight="darkblue">
  	<tr>
  		<th colspan="2" bgcolor="darkblue"><font color="white"><strong>Dump of FORM Variables</strong></font></th>
  	</tr>
  	<tr>
  		<td bgcolor="lightskyblue">FieldNames</td>
  		<td>#FORM.fieldNames#</td>
  	</tr>
  	<cfloop list="#FORM.fieldnames#" index="key">
  	<tr>
  		<td valign="top" bgcolor="lightskyblue">#key#</td>
  		<td>#HTMLEditFormat(evaluate("FORM.#key#"))#</td>
  	</tr>
  	</cfloop>
  	</table>
  	</cfoutput>
  </cfif>
  
  </body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/cfm/sample02_mx.cfm
  
  Index: sample02_mx.cfm
  ===================================================================
  <!---
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample02_mx.cfm
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:18:45
   * 
   * File Authors:
   * 		Hendrik Kramer (hk@lwd.de)
  --->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <html>
  <head>
  	<title>FCKeditor - Sample</title>
  	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  	<meta name="robots" content="noindex, nofollow">
  	<link href="../sample.css" rel="stylesheet" type="text/css" />
  </head>
  
  <body>
  
  <h1>FCKEditor - ColdFusion Component (CFC) - Sample 2</h1>
  
  This sample displays a normal HTML form with a FCKeditor with full features enabled; invoked by a ColdFusion Component.<br>
  ColdFusion is a registered trademark and product of <a href="http://www.macromedia.com/software/coldfusion/" target="_blank">Macromedia, Inc</a>.
  <hr>
  
  <cflock scope="SERVER" type="READONLY" timeout="10">
  	<cfset prodVersion = listFirst( server.coldFusion.productVersion )>
  </cflock>
  
  <cfif prodVersion LT 6>
  	<cfoutput><br><em style="color: red;">This sample work only with a ColdFusion MX server and higher, because it uses some advantages of this version.<br>Please try our other <a href="sample01.cfm">ColdFusion Sample Integration</a>.</em></cfoutput>
  	<cfabort>
  </cfif>
  
  <form method="POST" action="<cfoutput>#cgi.script_name#</cfoutput>">
  
  <cfscript>
  	fckEditor = createObject("component", "/fckeditor/fckeditor");
  	fckEditor.instanceName	= "textEditor";
  	fckEditor.value			= 'This is some sample text. You are using <a href="http://fckeditor.net/" target="_blank">FCKeditor</a>.';
  	fckEditor.basePath		= "/fckeditor/";
  	fckEditor.width			= "100%";
  	fckEditor.height		= 200;
  	fckEditor.create(); // create the editor.
  </cfscript>
  
  <br />
  <input type="submit" value="Submit">
  <br />
  </form>
  
  <cfdump var="#FORM#" label="Dump of FORM Variables">
  
  </body>
  </html>
  
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/_samples default.html sample.css
                        sampleslist.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_samples/default.html
  
  Index: default.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: default.html
   * 	Samples Frameset page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<title>FCKeditor - Samples</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  	</head>
  	<frameset rows="60,*">
  		<frame src="sampleslist.html" noresize scrolling="no">
  		<frame name="Sample" src="html/sample01.html" noresize>
  	</frameset>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/sample.css
  
  Index: sample.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample.css
   * 	Styles used in the samples pages.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body, td, input, select, textarea
  {
  	font-size: 12px;
  	font-family: Arial, Verdana, Sans-Serif;
  }
  
  h1
  {
  	font-weight: bold;
  	font-size: 180%;
  	margin-bottom: 10px;
  }
  
  form
  {
  	margin: 0px 0px 0px 0px;
  	padding: 0px 0px 0px 0px;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/sampleslist.html
  
  Index: sampleslist.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sampleslist.html
   * 	Page used to select the sample to view.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample Selection</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="sample.css" rel="stylesheet" type="text/css" />
  		<script language="javascript">
  <!--
  
  if ( window.top == window )
  	document.location = 'default.html' ;
  
  function OpenSample( sample )
  {
  	if ( sample.length > 0 )
  		window.open( sample, 'Sample' ) ;
  }
  
  //-->
  		</script>
  	</head>
  	<body bottommargin="0" topmargin="0">
  		<table height="100%" border="0" cellpadding="0" cellspacing="0">
  			<tr>
  				<td>
  					Please select the sample you want to view:
  					<br>
  					<select onchange="OpenSample(this.value);">
  						<option value="html/sample01.html" selected>Javascript : Sample 01 : Editor with all features</option>
  						<option value="html/sample02.html">Javascript : Sample 02 : Replacement of a TEXTAREA</option>
  						<option value="html/sample03.html">Javascript : Sample 03 : Multi-language support</option>
  						<option value="html/sample04.html">Javascript : Sample 04 : Toolbar selection</option>
  						<option value="html/sample05.html">Javascript : Sample 05 : Skins support</option>
  						<option value=""> </option>
  						<option value="aspx/sample01.aspx">ASP.Net : Sample 01 : Editor with all features</option>
  						<option value=""> </option>
  						<option value="cfm/sample01.cfm">ColdFusion : Sample 01 : Editor with all features</option>
  						<option value="cfm/sample02_mx.cfm">ColdFusion : Sample 02 : Advanced version for ColdFusion MX</option>
  						<option value=""> </option>
  						<option value="jsp/sample01.jsp">JSP : Sample 01 : Editor with all features</option>
  						<option value="jsp/sample02_tag.jsp">JSP : Sample 02 : Editor with all features - TagLib version</option>
  					</select>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/_samples/html sample01.html sample02.html
                        sample03.html sample04.html sample05.html
                        sampleposteddata.asp sampleposteddata.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/_samples/html/sample01.html
  
  Index: sample01.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample01.html
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:35:28
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css" />
  		<script type="text/javascript" src="../../fckeditor.js"></script>
  		<script type="text/javascript">
  
  function FCKeditor_OnComplete( editorInstance )
  {
  	window.status = editorInstance.Description ;
  }
  
  		</script>
  	</head>
  	<body>
  		<h1>FCKeditor - Javascript - Sample 1</h1>
  		This sample displays a normal HTML form with an FCKeditor with full features 
  		enabled.
  		<hr>
  		<form action="sampleposteddata.asp" method="post" target="_blank">
  			<script type="text/javascript">
  <!--
  // Automatically calculates the editor base path based on the _samples directory.
  // This is usefull only for these samples. A real application should use something like this:
  // oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('_samples')) ;
  
  var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
  oFCKeditor.BasePath	= sBasePath ;
  oFCKeditor.Value	= 'This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.' ;
  oFCKeditor.Create() ;
  //-->
  			</script>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </html>
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sample02.html
  
  Index: sample02.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample02.html
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:12:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css" />
  		<script type="text/javascript" src="../../fckeditor.js"></script>
  		<script type="text/javascript">
  
  window.onload = function()
  {
  	// Automatically calculates the editor base path based on the _samples directory.
  	// This is usefull only for these samples. A real application should use something like this:
  	// oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  	var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('_samples')) ;
  
  	var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
  	oFCKeditor.BasePath	= sBasePath ;
  	oFCKeditor.ReplaceTextarea() ;
  }
  
  		</script>
  	</head>
  	<body>
  		<h1>FCKeditor - Javascript - Sample 2</h1>
  		This sample displays a normal HTML form with an FCKeditor with full features 
  		enabled. It uses the "ReplaceTextarea" command to create the editor.
  		<hr>
  		<form action="sampleposteddata.asp" method="post" target="_blank">
  			<div>
  				<textarea id="FCKeditor1" name="FCKeditor1" style="WIDTH: 100%; HEIGHT: 200px">This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</textarea>
  			</div>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sample03.html
  
  Index: sample03.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample03.html
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:12:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css">
  			<script type="text/javascript" src="../../fckeditor.js"></script>
  			<script type="text/javascript">
  
  function FCKeditor_OnComplete( editorInstance )
  {
  	var oCombo = document.getElementById( 'cmbLanguages' ) ;
  	for ( code in editorInstance.Language.AvailableLanguages )
  	{
  		AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
  	}
  	oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
  }	
  
  function AddComboOption(combo, optionText, optionValue)
  {
  	var oOption = document.createElement("OPTION") ;
  
  	combo.options.add(oOption) ;
  
  	oOption.innerHTML = optionText ;
  	oOption.value     = optionValue ;
  	
  	return oOption ;
  }
  
  function ChangeLanguage( languageCode )
  {
  	window.location.href = window.location.pathname + "?" + languageCode ;
  }
  			</script>
  	</head>
  	<body>
  		<h1>FCKeditor - Javascript - Sample 3</h1>
  		This sample shows the editor in all it's available languages.
  		<hr>
  		<table cellpadding="0" cellspacing="0" border="0">
  			<tr>
  				<td>
  					Select a language:&nbsp;
  				</td>
  				<td>
  					<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
  					</select>
  				</td>
  			</tr>
  		</table>
  		<br>
  		<form action="sampleposteddata.asp" method="post" target="_blank">
  			<script type="text/javascript">
  <!--
  // Automatically calculates the editor base path based on the _samples directory.
  // This is usefull only for these samples. A real application should use something like this:
  // oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/_samples/')+1) ;
  
  var sLang ;
  if ( document.location.search.length > 1 )
  	sLang = document.location.search.substr(1) ;
  
  var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
  oFCKeditor.BasePath	= sBasePath ;
  if ( sLang == null )
  {
  	oFCKeditor.Config["AutoDetectLanguage"] = true ;
  	oFCKeditor.Config["DefaultLanguage"]    = "en" ;
  }
  else
  {
  	oFCKeditor.Config["AutoDetectLanguage"] = false ;
  	oFCKeditor.Config["DefaultLanguage"]    = sLang ;
  }
  oFCKeditor.Value	= 'This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.' ;
  oFCKeditor.Create() ;
  //-->
  			</script>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sample04.html
  
  Index: sample04.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample04.html
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:12:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css">
  			<script type="text/javascript" src="../../fckeditor.js"></script>
  			<script type="text/javascript">
  
  function FCKeditor_OnComplete( editorInstance )
  {
  	var oCombo = document.getElementById( 'cmbToolbars' ) ;
  	oCombo.value = editorInstance.ToolbarSet.Name ;
  	oCombo.style.visibility = '' ;
  }
  
  function ChangeLanguage( languageCode )
  {
  	window.location.href = window.location.pathname + "?" + languageCode ;
  }
  
  			</script>
  	</head>
  	<body>
  		<h1>FCKeditor - Javascript - Sample 4</h1>
  		This sample shows how to change the editor toolbar.
  		<hr>
  		<table cellpadding="0" cellspacing="0" border="0">
  			<tr>
  				<td>
  					Select the toolbar to load:&nbsp;
  				</td>
  				<td>
  					<select id="cmbToolbars" onchange="ChangeLanguage(this.value);" style="VISIBILITY: hidden">
  						<option value="Default" selected>Default</option>
  						<option value="Basic">Basic</option>
  					</select>
  				</td>
  			</tr>
  		</table>
  		<br>
  		<form action="sampleposteddata.asp" method="post" target="_blank">
  			<script type="text/javascript">
  <!--
  // Automatically calculates the editor base path based on the _samples directory.
  // This is usefull only for these samples. A real application should use something like this:
  // oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/_samples/')+1) ;
  
  // Get the toolbar from the URL.
  var sToolbar ;
  if ( document.location.search.length > 1 )
  	sToolbar = document.location.search.substr(1) ;
  
  var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
  oFCKeditor.BasePath	= sBasePath ;
  
  if ( sToolbar != null )
  	oFCKeditor.ToolbarSet = sToolbar ;
  
  oFCKeditor.Value	= 'This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.' ;
  oFCKeditor.Create() ;
  //-->
  			</script>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sample05.html
  
  Index: sample05.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sample05.html
   * 	Sample page.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:12:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Sample</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css">
  			<script type="text/javascript" src="../../fckeditor.js"></script>
  			<script type="text/javascript">
  
  function FCKeditor_OnComplete( editorInstance )
  {
  	var oCombo = document.getElementById( 'cmbSkins' ) ;
  	
  	// Get the active skin.
  	var sSkin = editorInstance.Config['SkinPath'] ;
  	sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
  	
  	oCombo.value = sSkin ;
  	oCombo.style.visibility = '' ;
  }
  
  function ChangeLanguage( languageCode )
  {
  	window.location.href = window.location.pathname + "?" + languageCode ;
  }
  
  			</script>
  	</head>
  	<body>
  		<h1>FCKeditor - Javascript - Sample 5</h1>
  		This sample shows how to change the editor skin.
  		<hr>
  		<table cellpadding="0" cellspacing="0" border="0">
  			<tr>
  				<td>
  					Select the skin to load:&nbsp;
  				</td>
  				<td>
  					<select id="cmbSkins" onchange="ChangeLanguage(this.value);" style="VISIBILITY: hidden">
  						<option value="default" selected>Default</option>
  						<option value="office2003">Office 2003</option>
  						<option value="silver">Silver</option>
  					</select>
  				</td>
  			</tr>
  		</table>
  		<br>
  		<form action="sampleposteddata.asp" method="post" target="_blank">
  			<script type="text/javascript">
  <!--
  // Automatically calculates the editor base path based on the _samples directory.
  // This is usefull only for these samples. A real application should use something like this:
  // oFCKeditor.BasePath = '/fckeditor/' ;	// '/fckeditor/' is the default value.
  var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/_samples/')+1) ;
  
  // Get the skin from the URL.
  var sSkin ;
  if ( document.location.search.length > 1 )
  	sSkin = document.location.search.substr(1) ;
  
  var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
  oFCKeditor.BasePath	= sBasePath ;
  
  if ( sSkin != null )
  	oFCKeditor.Config['SkinPath'] = sBasePath + 'editor/skins/' + sSkin + '/' ;
  
  oFCKeditor.Value	= 'This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.' ;
  oFCKeditor.Create() ;
  //-->
  			</script>
  			<br>
  			<input type="submit" value="Submit">
  		</form>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sampleposteddata.asp
  
  Index: sampleposteddata.asp
  ===================================================================
  ﻿<!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sampleposteddata.asp
   * 	This page lists the data posted by a form.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-01 00:15:05
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Samples - Posted Data</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css" />
  	</head>
  	<body>
  		<h1>FCKeditor - Samples - Posted Data</h1>
  		This page lists all data posted by the form.
  		<hr>
  		<table width="100%" border="1" cellspacing="0" bordercolor="#999999">
  			<tr style="FONT-WEIGHT: bold; COLOR: #dddddd; BACKGROUND-COLOR: #999999">
  				<td noWrap>Field Name&nbsp;&nbsp;</td>
  				<td>Value</td>
  			</tr>
  			<% For Each sForm in Request.Form %>
  			<tr>
  				<td valign="top" nowrap><b><%=sForm%></b></td>
  				<td width="100%"><%=Server.HTMLEncode( Request.Form(sForm) )%></td>
  			</tr>
  			<% Next %>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/_samples/html/sampleposteddata.html
  
  Index: sampleposteddata.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: sampleposteddata.html
   * 	This page lists the data posted by a form. It uses the URL (GET data), 
   * 	so it's limited to 2KB of data.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:30:49
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Samples - Posted Data</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<link href="../sample.css" rel="stylesheet" type="text/css" />
  	</head>
  	<body>
  		<h1>FCKeditor - Samples - Posted Data</h1>
  		This page lists all data posted by the form. It uses the "QueryString" to search for data
  		submitted using the "GET" method, so it is limited to 2KB.
  		<hr>
  		<table width="100%" border="1" cellspacing="0" bordercolor="#999999">
  			<tr style="FONT-WEIGHT: bold; COLOR: #dddddd; BACKGROUND-COLOR: #999999">
  				<td>Field</td>
  				<td>Value</td>
  			</tr>
  			<script type="text/javascript">
  <!--
  
  function HTMLEncode( text )
  {
  	text = text.replace(/&/g, "&amp;") ;
  	text = text.replace(/"/g, "&quot;") ;
  	text = text.replace(/</g, "&lt;") ;
  	text = text.replace(/>/g, "&gt;") ;
  	text = text.replace(/'/g, "&#146;") ;
  
  	return text ;
  }
  
  var aParams = document.location.search.substr(1).split('&') ;
  
  for ( i = 0 ; i < aParams.length ; i++ )
  {
  	var aParam = aParams[i].split('=') ;
  	var sParamName  = aParam[0] ;
  	var sParamValue = aParam[1] ;
  
  	document.write( '<tr>' ) ;
  	document.write( '<td valign="top" nowrap><b>' + sParamName + '</b></td>' ) ;
  	document.write( '<td width="100%">' + HTMLEncode( unescape( sParamValue.replace( /\+/g, ' ' ) ) ) + '</td>' ) ;
  	document.write( '</tr>' ) ;
  }
  
  //-->
  			</script>
  		</table>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/editor/_source/classes fckcolorpanel.js
                        fckcontextmenugroup.js fckcontextmenuitem.js
                        fckcontextmenuseparator.js fckevents.js
                        fckpanel_gecko.js fckpanel_ie.js fcktoolbar.js
                        fcktoolbarbutton.js fcktoolbarcombo.js
                        fcktoolbarpanelbutton.js
                        fcktoolbarpanelbutton_gecko.js
                        fcktoolbarpanelbutton_ie.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckcolorpanel.js
  
  Index: fckcolorpanel.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcolorpanel.js
   * 	FCKColorPanel Class: represents a Color Selection panel.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 22:35:45
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKColorPanel = function( setColorFunction )
  {
  	// SetColorFunction is the function to be called when the user selects the
  	// desired color (from the panel itself or from the "More Colors..." popup.
  	this.SetColorFunction = setColorFunction ;
  }
  
  // Inherit from FCKPanel.
  FCKColorPanel.prototype = new FCKPanel ;
  
  FCKColorPanel.prototype.CreatePanelBody = function( targetDocument, targetDiv )
  {
  	function CreateSelectionDiv()
  	{
  		var oDiv = targetDocument.createElement( "DIV" ) ;
  		oDiv.className = 'ColorDeselected' ;
  		oDiv.onmouseover	= function() { this.className='ColorSelected' ; } ;
  		oDiv.onmouseout		= function() { this.className='ColorDeselected' ; } ;
  		
  		return oDiv ;
  	}
  
  	// Create the Table that will hold all colors.
  	var oTable = targetDocument.createElement( "TABLE" ) ;
  	oTable.cellPadding = 0 ;
  	oTable.cellSpacing = 0 ;
  	oTable.border = 0 ;
  
  	// Create the Button for the "Automatic" color selection.
  	var oDiv = CreateSelectionDiv() ;
  	oDiv.innerHTML = 
  		'<table cellspacing="0" cellpadding="0" width="100%" border="0">\
  			<tr>\
  				<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
  				<td nowrap width="100%" align="center" unselectable="on">Automatic</td>\
  			</tr>\
  		</table>' ;
  
  	oDiv.Panel = this ;
  	oDiv.onclick = function()
  	{
  		this.className = 'ColorDeselected' ;
  		this.Panel.SetColorFunction( '' ) ;
  		this.Panel.Hide() ;
  	}
  
  	var oCell = oTable.insertRow(-1).insertCell(-1) ;
  	oCell.colSpan = 8 ;
  	oCell.appendChild( oDiv ) ;
  
  	// Create an array of colors based on the configuration file.
  	var aColors = FCKConfig.FontColors.split(',') ;
  
  	// Create the colors table based on the array.
  	var iCounter = 0 ;
  	while ( iCounter < aColors.length )
  	{
  		var oRow = oTable.insertRow(-1) ;
  		
  		for ( var i = 0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++ )
  		{
  			var oDiv = CreateSelectionDiv() ;
  			oDiv.Color = aColors[iCounter] ;
  			oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>' ;
  
  			oDiv.Panel = this ;
  			oDiv.onclick = function()
  			{
  				this.className = 'ColorDeselected' ;
  				this.Panel.SetColorFunction( '#' + this.Color ) ;
  				this.Panel.Hide() ;
  			}
  		
  			oCell = oRow.insertCell(-1) ;
  			oCell.appendChild( oDiv ) ;
  		}
  	}
  
  	// Create the Row and the Cell for the "More Colors..." button.
  	var oDiv = CreateSelectionDiv() ;
  	oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">More Colors...</td></tr></table>' ;
  
  	oDiv.Panel = this ;
  	oDiv.onclick = function()
  	{
  		this.className = 'ColorDeselected' ;
  		this.Panel.Hide() ;
  		FCKDialog.OpenDialog( 'FCKDialog_Color', 'Select a Color', 'dialog/fck_colorselector.html', 400, 330, this.Panel.SetColorFunction ) ;
  	}
  
  	var oCell = oTable.insertRow(-1).insertCell(-1) ;
  	oCell.colSpan = 8 ;
  	oCell.appendChild( oDiv ) ;
  
  	// Append the resulting table to the target DIV.
  	targetDiv.appendChild( oTable ) ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckcontextmenugroup.js
  
  Index: fckcontextmenugroup.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenugroup.js
   * 	FCKContextMenuGroup Class: represents a group of items in the context 
   * 	menu. Generaly a group of items is directly dependent of the same rules.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKContextMenuGroup = function()
  {
  	this.IsVisible = true ;
  	
  	// Array with all available context menu items of this group.
  	this.Items = new Array() ;
  	
  	// This OPTIONAL function checks if the group must be shown.
  	this.ValidationFunction = null ;
  }
  
  // Adds an item to the group's items collecion.
  FCKContextMenuGroup.prototype.Add = function( contextMenuItem )
  {
  	this.Items[ this.Items.length ] = contextMenuItem ;
  }
  
  // Creates the <TR> elements that represent the item in a table (usually the rendered context menu).
  FCKContextMenuGroup.prototype.CreateTableRows = function( table )
  {
  	for ( var i = 0 ; i < this.Items.length ; i++ )
  	{
  		this.Items[i].CreateTableRow( table ) ;
  	}
  }
  
  FCKContextMenuGroup.prototype.SetVisible = function( isVisible )
  {
  	for ( var i = 0 ; i < this.Items.length ; i++ )
  	{
  		this.Items[i].SetVisible( isVisible ) ;
  	}
  	
  	this.IsVisible = isVisible ;
  }
  
  FCKContextMenuGroup.prototype.RefreshState = function()
  {
  	if ( ! this.IsVisible ) return ;
  	
  	for ( var i = 0 ; i < this.Items.length ; i++ )
  	{
  		this.Items[i].RefreshState() ;
  	}
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckcontextmenuitem.js
  
  Index: fckcontextmenuitem.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenuitem.js
   * 	FCKContextMenuItem Class: represents a item in the context menu.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKContextMenuItem = function( contextMenu, commandName, label, hasIcon )
  {
  	this.ContextMenu	= contextMenu ;
  	this.Command		= FCKCommands[ commandName ] ;
  	this.Label			= label ? label : commandName ;
  	this.HasIcon		= hasIcon ? true : false ;
  }
  
  FCKContextMenuItem.prototype.CreateTableRow = function( targetTable )
  {
  	// Creates the <TR> element.
  	this._Row = targetTable.insertRow(-1) ;
  	this._Row.className = 'CM_Disabled' ;
  	this._Row.FCKContextMenuItem = this ;
  	
  	// Sets the mouse over event.
  	this._Row.onmouseover = function()
  	{
  		if ( this.className != 'CM_Disabled' )
  			this.className = 'CM_Over' ;
  	}
  	
  	// Sets the mouse out event.
  	this._Row.onmouseout = function()
  	{
  		if ( this.className != 'CM_Disabled' )
  			this.className = 'CM_Option' ;
  	}
  	
  	this._Row.onclick = function()
  	{
  		this.FCKContextMenuItem.ContextMenu.Hide() ;
  		this.FCKContextMenuItem.Command.Execute() ;
  		return false ;
  	}
  	
  	var oCell = this._Row.insertCell(-1) ;
  	oCell.className = 'CM_Icon' ;
  	
  	if ( this.HasIcon ) oCell.innerHTML = '<img alt="" src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="20" unselectable="on">' ;
  	
  	oCell = this._Row.insertCell(-1) ;
  	oCell.className		= 'CM_Label' ;
  	oCell.unselectable	= 'on' ;
  	oCell.noWrap		= true ;
  	oCell.innerHTML		= this.Label ;
  }
  
  FCKContextMenuItem.prototype.SetVisible = function( isVisible )
  {
  	this._Row.style.display = isVisible ? '' : 'none' ;
  }
  
  FCKContextMenuItem.prototype.RefreshState = function()
  {
  	switch ( this.Command.GetState() )
  	{
  		case FCK_TRISTATE_ON :
  		case FCK_TRISTATE_OFF :
  			this._Row.className = 'CM_Option' ;
  			break ;
  		default :
  			this._Row.className = 'CM_Disabled' ;
  			break ;
  	}
  } 
  
  /*
  Sample output.
  -----------------------------------------
  <tr class="CM_Disabled">
  	<td class="CM_Icon"><img alt="" src="icons/button.cut.gif" width="21" height="20" unselectable="on"></td>
  	<td class="CM_Label" unselectable="on">Cut</td>
  </tr>
  -----------------------------------------
  <tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  	<td class="CM_Icon"></td>
  	<td class="CM_Label">Do Something</td>
  </tr>
  */
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckcontextmenuseparator.js
  
  Index: fckcontextmenuseparator.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenuseparator.js
   * 	FCKContextMenuSeparator Class: represents a separator in the toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKContextMenuSeparator = function()
  {
  }
  
  FCKContextMenuSeparator.prototype.CreateTableRow = function( targetTable )
  {
  	// Creates the <TR> element.
  	this._Row = targetTable.insertRow(-1) ;
  	this._Row.className = 'CM_Separator' ;
  	
  	var oCell = this._Row.insertCell(-1) ;
  	oCell.className = 'CM_Icon' ;
  	
  	oCell = this._Row.insertCell(-1) ;
  	oCell.className = 'CM_Label' ;
  	oCell.innerHTML = '<div></div>' ;
  }
  
  FCKContextMenuSeparator.prototype.SetVisible = function( isVisible )
  {
  	this._Row.style.display = isVisible ? '' : 'none' ;
  }
  
  FCKContextMenuSeparator.prototype.RefreshState = function()
  {
  	// Do nothing... its state doesn't change.
  } 
  
  /*
  Sample output.
  -----------------------------------------
  <tr class="CM_Separator">
  	<td class="CM_Icon"></td>
  	<td class="CM_Label"><div></div></td>
  </tr>
  */
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckevents.js
  
  Index: fckevents.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckevents.js
   * 	FCKEvents Class: used to handle events is a advanced way.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKEvents = function( eventsOwner )
  {
  	this.Owner = eventsOwner ;
  	this.RegisteredEvents = new Object() ;
  }
  
  FCKEvents.prototype.AttachEvent = function( eventName, functionPointer, params )
  {
  	if ( ! this.RegisteredEvents[ eventName ] ) this.RegisteredEvents[ eventName ] = new Array() ;
  	
  	this.RegisteredEvents[ eventName ][ this.RegisteredEvents[ eventName ].length ] = functionPointer ;
  }
  
  FCKEvents.prototype.FireEvent = function( eventName, params )
  {
  	var bReturnValue = true ;
  	
  	FCKDebug.Output( 'Firing event: ' + eventName, 'Fuchsia' ) ;
  	
  	var oCalls = this.RegisteredEvents[ eventName ] ;
  	if ( oCalls ) 
  	{
  		for ( i in oCalls )
  		{
  			if ( typeof( oCalls[ i ] ) == "function" )	// A Function Pointer
  			{
  				bReturnValue = ( bReturnValue && oCalls[ i ]( params ) ) ;
  			}
  			else										// A string (code to run)
  			{
  				bReturnValue = ( bReturnValue && eval( oCalls[ i ] ) ) ;
  			}
  		}
  	}
  	
  	return bReturnValue ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckpanel_gecko.js
  
  Index: fckpanel_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckpanel_gecko.js
   * 	FCKPanel Class: this is the IE version of the base class used to implement
   * 	"Panel" classes.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 16:32:56
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // The Panel Styles where already liaded in the parent window by the Context Menu scripts.
  // (They are included in the fck_contextmenu CSS)
  
  var FCKPanel = function()
  {}
  
  FCKPanel.prototype.Create = function()
  {
  	// Create the main DIV that is used as the panel base.
  	this.PanelDiv = window.parent.document.createElement('DIV') ;
  	this.PanelDiv.style.visibility	= 'hidden' ;
  	this.PanelDiv.className = 'FCK_Panel' ;
  	this.PanelDiv.style.zIndex = 10000 ;
  	this.PanelDiv.oncontextmenu = function() { return false ; }
  
  	// Put the main DIV inside the parent document.
  	window.parent.document.body.appendChild( this.PanelDiv );
  	
  	// It calls a method that must be defined on classes that inherit the 
  	// FCKPanel class.
  	if ( this.CreatePanelBody )
  		this.CreatePanelBody( window.parent.document, this.PanelDiv ) ;
  
  	this.Created = true ;
  }
  
  FCKPanel.prototype.Show = function( panelX, panelY )
  {
  	if ( ! this.Created )
  		this.Create() ;
  
  	// Set the context menu DIV in the specified location.
  	this.PanelDiv.style.left	= panelX + 'px' ;
  	this.PanelDiv.style.top		= panelY + 'px' ;
  
  	// Watch the "OnClick" event for all windows to close the Context Menu.
  	var oActualWindow = FCK.EditorWindow ;
  	while ( oActualWindow )
  	{
  		oActualWindow.document.addEventListener( 'click', this._OnDocumentClick, false ) ;
  		if ( oActualWindow != oActualWindow.parent )
  			oActualWindow = oActualWindow.parent ;
  		else if ( oActualWindow.opener == null ) 
  			oActualWindow = oActualWindow.opener ;
  		else
  			break ;
  	}
  
  	// Show it.
  	this.PanelDiv.style.visibility	= '' ;
  	FCK.ActivePanel = this ;
  }
  
  FCKPanel.prototype._OnDocumentClick = function( event )
  {
  	if ( ! FCK.ActivePanel ) return ;
  	
  	var e = event.target ;
  	while ( e )
  	{
  		if ( e == FCK.ActivePanel.PanelDiv ) return ;
  		e = e.parentNode ;
  	}
  	FCK.ActivePanel.Hide() ;
  }
  
  FCKPanel.prototype.Hide = function()
  {
  	this.PanelDiv.style.visibility = 'hidden' ;
  	this.PanelDiv.style.left = this.PanelDiv.style.top = '1px' ;
  	
  	delete FCK.ActivePanel ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fckpanel_ie.js
  
  Index: fckpanel_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckpanel_ie.js
   * 	FCKPanel Class: this is the IE version of the base class used to implement
   * 	"Panel" classes.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-27 15:55:23
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKPanel = function()
  {}
  
  FCKPanel.prototype.Create = function()
  {
  	// Create the Popup that will hold the panel.
  	this._Popup = window.createPopup() ;
  	this._Popup.document.createStyleSheet( FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
  	this._Popup.document.oncontextmenu = function() { return false ; }
  
  	// Create the main DIV that is used as the panel base.
  	this.PanelDiv = this._Popup.document.createElement('DIV') ;
  	this.PanelDiv.className = 'FCK_Panel' ;
  
  	// Put the main DIV inside the Popup.
  	this._Popup.document.body.appendChild(this.PanelDiv) ;
  	
  	// It calls a method that must be defined on classes that inherit the 
  	// FCKPanel class.
  	if ( this.CreatePanelBody )
  		this.CreatePanelBody( this._Popup.document, this.PanelDiv ) ;
  	
  	this._Popup.document.close() ;
  	
  	this.Created = true ;
  }
  
  FCKPanel.prototype.Show = function( panelX, panelY )
  {
  	if ( ! this.Created )
  		this.Create() ;
  
  	// The offsetWidth and offsetHeight properties are not available if the 
  	// element is not visible. So we must "show" the popup with no size to
  	// be able to use that values in the second call.
  	this._Popup.show( panelX, panelY, 0, 0 ) ;
  
  	// Second call: Show the Popup at the specified location.
  	this._Popup.show( panelX, panelY, this.PanelDiv.offsetWidth, this.PanelDiv.offsetHeight ) ;
  }
  
  FCKPanel.prototype.Hide = function()
  {
  	if ( this._Popup )
  		this._Popup.hide() ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbar.js
  
  Index: fcktoolbar.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbar.js
   * 	FCKToolbar Class: represents a toolbar. A toolbar is not the complete
   * 	toolbar set visible, but just a strip on it... a group of items.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbar = function()
  {
  	this.Items = new Array() ;
  	
  	this.DOMTable = document.createElement( 'table' ) ;
  	this.DOMTable.className = 'TB_Toolbar' ;
  	with ( this.DOMTable )
  	{
  		// Sets the toolbar direction. IE uses "styleFloat" and Gecko uses "cssFloat".
  		style.styleFloat = style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
  		
  		cellPadding = 0 ;
  		cellSpacing = 0 ;
  		border = 0 ;
  	}
  
  	this.DOMRow = this.DOMTable.insertRow(-1) ;
  
  	var oCell = this.DOMRow.insertCell(-1) ;
  	oCell.className = 'TB_Start' ;
  	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
  
  	FCKToolbarSet.DOMElement.appendChild( this.DOMTable ) ;
  }
  
  FCKToolbar.prototype.AddItem = function( toolbarItem )
  {
  	this.Items[ this.Items.length ] = toolbarItem ;
  	toolbarItem.CreateInstance( this ) ;
  }
  
  FCKToolbar.prototype.AddSeparator = function()
  {
  	var oCell = this.DOMRow.insertCell(-1) ;
  	oCell.unselectable = 'on' ;
  	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
  }
  
  FCKToolbar.prototype.AddTerminator = function()
  {
  	var oCell = this.DOMRow.insertCell(-1) ;
  	oCell.className = 'TB_End' ;
  	oCell.innerHTML = '<img src="' + FCKConfig.SkinPath + 'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">' ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbarbutton.js
  
  Index: fcktoolbarbutton.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbarbutton.js
   * 	FCKToolbarButton Class: represents a button in the toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView )
  {
  	this.Command	= FCKCommands[ commandName ] ;
  	this.Label		= label ? label : commandName ;
  	this.Tooltip	= tooltip ? tooltip : ( label ? label : commandName) ;
  	this.Style		= style ? style : FCK_TOOLBARITEM_ONLYICON ;
  	this.SourceView	= sourceView ? true : false ;
  	this.State		= FCK_UNKNOWN ;
  }
  
  FCKToolbarButton.prototype.CreateInstance = function( parentToolbar )
  {
  /*
  	<td title="Bold" class="TB_Button_Off" unselectable="on" onmouseover="Button_OnMouseOver(this);" onmouseout="Button_OnMouseOut(this);">
  		<table class="TB_ButtonType_Icon" cellspacing="0" cellpadding="0" border="0">
  			<tr>
  				<td class="TB_Icon"><img src="icons/button.redo.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = '';"></td>
  				<td class="TB_Text" unselectable="on">Redo</td>
  			</tr>
  		</table>
  	</td>
  */	
  	this.DOMDiv = document.createElement( 'div' ) ;
  	this.DOMDiv.className		= 'TB_Button_Off' ;
  
  	this.DOMDiv.FCKToolbarButton	= this ;
  	
  	this.DOMDiv.onmouseover = function()
  	{
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED )
  		{
  			this.className = 'TB_Button_On' ;
  		}
  	}
  	
  	this.DOMDiv.onmouseout	= function()
  	{
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State != FCK_TRISTATE_ON )
  		{
  			this.className = 'TB_Button_Off' ;
  		}
  	}
  	
  	this.DOMDiv.onclick = function()
  	{
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED )
  			this.FCKToolbarButton.Command.Execute() ;
  		return false ;
  	}
  
  	// Gets the correct CSS class to use for the specified style (param).
  	var sClass ;
  	switch ( this.Style )
  	{
  		case FCK_TOOLBARITEM_ONLYICON :
  			sClass = 'TB_ButtonType_Icon' ;
  			break ;
  		case FCK_TOOLBARITEM_ONLYTEXT :
  			sClass = 'TB_ButtonType_Text' ;
  			break ;
  		case FCK_TOOLBARITEM_ICONTEXT :
  			sClass = '' ;
  			break ;
  	}
  
  	this.DOMDiv.innerHTML = 
  		'<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
  			'<tr>' +
  				'<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' +
  				'<td class="TB_Text" unselectable="on">' + this.Label + '</td>' +
  			'</tr>' +
  		'</table>' ;
  	
  
  	var oCell = parentToolbar.DOMRow.insertCell(-1) ;
  	oCell.appendChild( this.DOMDiv ) ;
  	
  	this.RefreshState() ;
  }
  
  FCKToolbarButton.prototype.RefreshState = function()
  {
  	// Gets the actual state.
  	var eState ;
  	
  	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
  		eState = FCK_TRISTATE_DISABLED ;
  	else
  		eState = this.Command.GetState() ;
  	
  	// If there are no state changes than do nothing and return.
  	if ( eState == this.State ) return ;
  	
  	// Sets the actual state.
  	this.State = eState ;
  	
  	switch ( this.State )
  	{
  		case FCK_TRISTATE_ON :
  			this.DOMDiv.className = 'TB_Button_On' ;
  			break ;
  		case FCK_TRISTATE_OFF :
  			this.DOMDiv.className = 'TB_Button_Off' ;
  			break ;
  		default :
  			this.DOMDiv.className = 'TB_Button_Disabled' ;
  			break ;
  	}
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbarcombo.js
  
  Index: fcktoolbarcombo.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbarcombo.js
   * 	FCKToolbarCombo Class: represents a combo in the toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:48
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbarCombo = function( commandName, label, itemsValues, itemsNames, tooltip, style, firstIsBlank, itemsSeparator, sourceView )
  {
  	this.Command	= FCKCommands[ commandName ] ;
  	
  	this.Label		= label ? label : commandName ;
  	this.Tooltip	= tooltip ? tooltip : ( label ? label : commandName) ;
  	this.Style		= style ? style : FCK_TOOLBARITEM_ICONTEXT ;
  	this.SourceView	= sourceView ? true : false ;
  	this.State		= FCK_UNKNOWN ;
  	
  	this.ItemsValues	= itemsValues ;
  	this.ItemsNames		= itemsNames ? itemsNames : itemsValues ;
  	this.ItemsSeparator	= itemsSeparator ? itemsSeparator : ';' ;
  	
  	this.FirstIsBlank	= firstIsBlank != null ? firstIsBlank : true ;
  }
  
  FCKToolbarCombo.prototype.CreateInstance = function( parentToolbar )
  {
  /*
  	<td class="TB_Combo_Disabled" unselectable="on">
  		<table class="ButtonType_IconText" cellspacing="0" cellpadding="0" border="0">
  			<tr>
  				<td class="TB_Text" unselectable="on">Style</td>
  				<td><select title="Style"><option>Style 1</option><option>Style 2</option></select></td>
  			</tr>
  		</table>
  	</td>
  */	
  	this.DOMDiv = document.createElement( 'div' ) ;
  	this.DOMDiv.className		= 'TB_Combo_Off' ;
  
  	// Gets the correct CSS class to use for the specified style (param).
  	var sClass ;
  	switch ( this.Style )
  	{
  		case FCK_TOOLBARITEM_ONLYICON :
  			sClass = 'TB_ButtonType_Icon' ;
  			break ;
  		case FCK_TOOLBARITEM_ONLYTEXT :
  			sClass = 'TB_ButtonType_Text' ;
  			break ;
  		case FCK_TOOLBARITEM_ICONTEXT :
  			sClass = '' ;
  			break ;
  	}
  
  	this.DOMDiv.innerHTML = 
  		'<table class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
  			'<tr>' +
  				'<td class="TB_Text" unselectable="on" nowrap>' + this.Label + '</td>' +
  				'<td unselectable="on"><select title="' + this.Tooltip + '"></select></td>' +
  			'</tr>' +
  		'</table>' ;
  
  	// Gets the SELECT element.
  	this.SelectElement = this.DOMDiv.firstChild.firstChild.firstChild.childNodes.item(1).firstChild ;
  	
  	this.SelectElement.FCKToolbarCombo = this ;
  
  	this.SelectElement.onchange = function()
  	{
  		this.FCKToolbarCombo.Command.Execute( this.value ) ;
  		return false ;
  	}
  
  	var oCell = parentToolbar.DOMRow.insertCell(-1) ;
  	oCell.appendChild( this.DOMDiv ) ;
  
  	// Loads all combo items.
  	this.RefreshItems() ;
  	
  	// Sets its initial state (probably disabled).
  	this.RefreshState() ;
  }
  
  FCKToolbarCombo.prototype.RefreshItems = function()
  {
  	// Create the empty arrays of items to add (names and values)
  	var aNames	= FCKTools.GetResultingArray( this.ItemsNames, this.ItemsSeparator ) ;
  	var aValues	= FCKTools.GetResultingArray( this.ItemsValues, this.ItemsSeparator ) ;
  	
  	// Clean up the combo.
  	FCKTools.RemoveAllSelectOptions( this.SelectElement ) ;
  	
  	// Verifies if the first item in the combo must be blank.
  	if ( this.FirstIsBlank )
  		FCKTools.AddSelectOption( document, this.SelectElement, '', '' ) ;
  	
  	// Add all items to the combo.
  	for ( var i = 0 ; i < aValues.length ; i++ )
  	{
  		FCKTools.AddSelectOption( document, this.SelectElement, aNames[i], aValues[i] ) ;
  	}
  }
  
  FCKToolbarCombo.prototype.RefreshState = function()
  {
  	// Gets the actual state.
  	var eState ;
  	
  	if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
  	{
  		eState = FCK_TRISTATE_DISABLED ;
  		
  		// Cleans the actual selection.
  		this.SelectElement.value = '' ;
  	}
  	else
  	{
  		var sValue = this.Command.GetState() ;
  
  		// Sets the combo value.
  		FCKTools.SelectNoCase( this.SelectElement, sValue ? sValue : '', '' ) ;
  
  		// Gets the actual state.
  		eState = sValue == null ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_ON ;
  	}
  
  	// If there are no state changes then do nothing and return.
  	if ( eState == this.State ) return ;
  	
  	// Sets the actual state.
  	this.State = eState ;
  
  	// Updates the graphical state.	
  	this.DOMDiv.className		= ( eState == FCK_TRISTATE_ON ? 'TB_Combo_Off' : 'TB_Combo_Disabled' ) ;
  	this.SelectElement.disabled	= ( eState == FCK_TRISTATE_DISABLED ) ;	
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js
  
  Index: fcktoolbarpanelbutton.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbarpanelbutton.js
   * 	FCKToolbarPanelButton Class: represents a special button in the toolbar
   * 	that shows a panel when pressed.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-27 16:27:03
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbarPanelButton = function( commandName, label, tooltip, style )
  {
  	this.Command	= FCKCommands[ commandName ] ;
  	this.Label		= label ? label : commandName ;
  	this.Tooltip	= tooltip ? tooltip : ( label ? label : commandName) ;
  	this.Style		= style ? style : FCK_TOOLBARITEM_ONLYICON ;
  	this.State		= FCK_UNKNOWN ;
  	
  	if ( this.Command == null )
  		alert( 'Unknown command name "' + commandName + '"' ) ;
  }
  
  FCKToolbarPanelButton.prototype.CreateInstance = function( parentToolbar )
  {
  /*
  	<td title="Bold" class="TB_Button_Off" unselectable="on" onmouseover="Button_OnMouseOver(this);" onmouseout="Button_OnMouseOut(this);">
  		<table class="TB_ButtonType_Icon" cellspacing="0" cellpadding="0" border="0">
  			<tr>
  				<td class="TB_Icon"><img src="icons/button.redo.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = '';"></td>
  				<td class="TB_Text" unselectable="on">Redo</td>
  				<td class="TB_ButtonArrow"><img src="skin/images/toolbar_buttonarrow.gif" width="5" height="3"></td>
  			</tr>
  		</table>
  	</td>
  */	
  	this.DOMDiv = document.createElement( 'div' ) ;
  	this.DOMDiv.className = 'TB_Button_Off' ;
  
  	this.DOMDiv.FCKToolbarButton = this ;
  	
  	this.DOMDiv.onmouseover = function()
  	{
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED )
  		{
  			this.className = 'TB_Button_On' ;
  		}
  	}
  	
  	this.DOMDiv.onmouseout	= function()
  	{
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State != FCK_TRISTATE_ON )
  		{
  			this.className = 'TB_Button_Off' ;
  		}
  	}
  	
  	this.DOMDiv.onclick = function( ev )
  	{
  		// Call the OnClick event handler (it is different depending o the browser version.
  		if ( this.FCKToolbarButton.State != FCK_TRISTATE_DISABLED )
  			this.FCKToolbarButton.HandleOnClick( this.FCKToolbarButton, ev ) ;
  
  		// For Mozilla we must stop the event propagation to avoid it hiding 
  		// the panel because of a click outside of it.
  		if ( ev )
  			ev.stopPropagation() ;
  			
  		return false ;
  	}
  
  	// Gets the correct CSS class to use for the specified style (param).
  	var sClass ;
  	switch ( this.Style )
  	{
  		case FCK_TOOLBARITEM_ONLYICON :
  			sClass = 'TB_ButtonType_Icon' ;
  			break ;
  		case FCK_TOOLBARITEM_ONLYTEXT :
  			sClass = 'TB_ButtonType_Text' ;
  			break ;
  		case FCK_TOOLBARITEM_ICONTEXT :
  			sClass = '' ;
  			break ;
  	}
  
  	this.DOMDiv.innerHTML = 
  		'<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' +
  			'<tr>' +
  				'<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' +
  				'<td class="TB_Text" unselectable="on">' + this.Label + '</td>' +
  				'<td class="TB_ButtonArrow" unselectable="on"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
  			'</tr>' +
  		'</table>' ;
  	
  
  	var oCell = parentToolbar.DOMRow.insertCell(-1) ;
  	oCell.appendChild( this.DOMDiv ) ;
  	
  	this.RefreshState() ;
  }
  
  // The Panel Button works like a normal button so the refresh state function
  // defined for the normal button can be reused here.
  FCKToolbarPanelButton.prototype.RefreshState = FCKToolbarButton.prototype.RefreshState ;
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbarpanelbutton_gecko.js
  
  Index: fcktoolbarpanelbutton_gecko.js
  ===================================================================
  FCKToolbarPanelButton.prototype.HandleOnClick = function( panelButton, ev )
  {
  	// The X and Y position of the Panel must be calculated based on
  	// the button position.
  	var e = panelButton.DOMDiv ;
  
  	// Get the DIV and the editor frame positions.
  	var oDivCoords = FCKTools.GetElementPosition( e ) ;
  	var oFrmCoords = FCKTools.GetElementPosition( window.frameElement ) ;
  
  	// Get the actual window (IFRAME) position on screen.
  	var iPanelX = oDivCoords.X + oFrmCoords.X ;
  	var iPanelY = oDivCoords.Y + oFrmCoords.Y + e.offsetHeight ;		// The button height is added so the panel is aligned on its base line.
  
  	panelButton.Command.Execute(iPanelX,iPanelY) ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/classes/fcktoolbarpanelbutton_ie.js
  
  Index: fcktoolbarpanelbutton_ie.js
  ===================================================================
  FCKToolbarPanelButton.prototype.HandleOnClick = function( panelButton, ev )
  {
  	// The X and Y position of the Panel must be calculated based on
  	// the button position.
  	var e = panelButton.DOMDiv ;
  
  	// Get the DIV position.
  	var oDivCoords = FCKTools.GetElementPosition( e ) ;
  
  	// Get the actual window (IFRAME) position on screen.
  	var iPanX = oDivCoords.X + window.screenLeft ;
  	var iPanY = oDivCoords.Y + window.screenTop + e.offsetHeight + 1 ;		// The button height is added so the panel is aligned on its base line.
  
  	panelButton.Command.Execute(iPanX,iPanY) ;
  }
  
  


comfuture    04/11/24 21:25:21

  Added:       util/fckeditor/editor/_source/commandclasses
                        fck_othercommands.js fcknamedcommand.js
                        fckpasteplaintextcommand.js fckpastewordcommand.js
                        fcktablecommand.js fcktextcolorcommand.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fck_othercommands.js
  
  Index: fck_othercommands.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_othercommands.js
   * 	Definition of other commands that are not available internaly in the
   * 	browser (see FCKNamedCommand).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-01 00:12:43
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // ### General Dialog Box Commands.
  var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam )
  {
  	this.Name	= name ;
  	this.Title	= title ;
  	this.Url	= url ;
  	this.Width	= width ;
  	this.Height	= height ;
  	
  	this.GetStateFunction	= getStateFunction ;
  	this.GetStateParam		= getStateParam ;
  }
  
  FCKDialogCommand.prototype.Execute = function()
  {
  	FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height ) ;
  }
  
  FCKDialogCommand.prototype.GetState = function()
  {
  	if ( this.GetStateFunction )
  	{
  		return this.GetStateFunction( this.GetStateParam ) ;
  	}
  	else
  	{
  		return FCK_TRISTATE_OFF ;
  	}
  }
  
  // Generic Undefined command (usually used when a command is under development).
  var FCKUndefinedCommand = function()
  {
  	this.Name = 'Undefined' ;
  }
  
  FCKUndefinedCommand.prototype.Execute = function()
  {
  	alert( 'Command not implemented.' ) ;
  } 
  
  FCKUndefinedCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  // ### FontName
  var FCKFontNameCommand = function() 
  {
  	this.Name = 'FontName' ;
  }
  
  FCKFontNameCommand.prototype.Execute = function( fontName )
  {
  	if (fontName == null || fontName == "")
  	{
  		// TODO: Remove font name attribute.
  	}
  	else
  	{
  		FCK.ExecuteNamedCommand( 'FontName', fontName ) ;
  	}
  }
  
  FCKFontNameCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandValue( 'FontName' ) ;
  }
  
  // ### FontSize
  var FCKFontSizeCommand = function() 
  {
  	this.Name = 'FontSize' ;
  }
  
  FCKFontSizeCommand.prototype.Execute = function( fontSize )
  {
  	if ( typeof( fontSize ) == 'string' ) fontSize = parseInt(fontSize) ;
  	
  	if ( fontSize == null || fontSize == '' )
  	{
  		// TODO: Remove font size attribute (Now it works with size 3. Will it work forever?)
  		FCK.ExecuteNamedCommand( 'FontSize', 3 ) ;
  	}
  	else
  	{
  		FCK.ExecuteNamedCommand( 'FontSize', fontSize ) ;
  	}
  }
  
  FCKFontSizeCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandValue( 'FontSize' ) ;
  }
  
  // ### FormatBlock
  var FCKFormatBlockCommand = function() 
  {
  	this.Name = 'FormatBlock' ;
  }
  
  FCKFormatBlockCommand.prototype.Execute = function( formatName )
  {
  	if ( formatName == null || formatName == '' )
  	{
  		FCK.ExecuteNamedCommand( 'FormatBlock', '<P>' ) ;
  	}
  	else
  	{
  		FCK.ExecuteNamedCommand( 'FormatBlock', formatName ) ;
  	}
  }
  
  FCKFormatBlockCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandValue( 'FormatBlock' ) ;
  }
  
  // ### Preview
  var FCKPreviewCommand = function() 
  {
  	this.Name = 'Preview' ;
  }
  
  FCKPreviewCommand.prototype.Execute = function()
  {
       FCK.Preview() ;
  }
  
  FCKPreviewCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  // ### Save
  var FCKSaveCommand = function() 
  {
  	this.Name = 'Save' ;
  }
  
  FCKSaveCommand.prototype.Execute = function()
  {
  	// Get the linked field form.
  	var oForm = FCK.LinkedField.form ;
  	
  	// Submit the form.
  	oForm.submit() ;
  }
  
  FCKSaveCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  // ### NewPage
  var FCKNewPageCommand = function() 
  {
  	this.Name = 'NewPage' ;
  }
  
  FCKNewPageCommand.prototype.Execute = function()
  {
  	FCK.SetHTML( '' ) ;
  }
  
  FCKNewPageCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  // ### Source button
  var FCKSourceCommand = function()
  {
  	this.Name = "Source" ;
  }
  
  FCKSourceCommand.prototype.Execute = function()
  {
       FCK.SwitchEditMode() ;
  }
  
  FCKSourceCommand.prototype.GetState = function()
  {
  	return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fcknamedcommand.js
  
  Index: fcknamedcommand.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcknamedcommand.js
   * 	FCKNamedCommand Class: represents an internal browser command.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-17 15:05:35
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKNamedCommand = function( commandName )
  {
  	this.Name = commandName ;
  }
  
  FCKNamedCommand.prototype.Execute = function()
  {
  	FCK.ExecuteNamedCommand( this.Name ) ;
  }
  
  FCKNamedCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandState( this.Name ) ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
  
  Index: fckpasteplaintextcommand.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckpasteplaintextcommand.js
   * 	FCKPastePlainTextCommand Class: represents the 
   * 	"Paste as Plain Text" command.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 23:08:23
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKPastePlainTextCommand = function() 
  {
  	this.Name = 'PasteText' ;
  }
  
  FCKPastePlainTextCommand.prototype.Execute = function()
  {
  	FCK.PasteAsPlainText() ;
  }
  
  FCKPastePlainTextCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandState( 'Paste' ) ;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js
  
  Index: fckpastewordcommand.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckpastewordcommand.js
   * 	FCKPasteWordCommand Class: represents the "Paste from Word" command.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:20:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKPasteWordCommand = function() 
  {
  	this.Name = 'PasteWord' ;
  }
  
  FCKPasteWordCommand.prototype.Execute = function()
  {
  	FCK.PasteFromWord() ;
  }
  
  FCKPasteWordCommand.prototype.GetState = function()
  {
  	return FCK.GetNamedCommandState( 'Paste' ) ;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fcktablecommand.js
  
  Index: fcktablecommand.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktablecommand.js
   * 	FCKPastePlainTextCommand Class: represents the 
   * 	"Paste as Plain Text" command.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 01:05:29
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKTableCommand = function( command )
  {
  	this.Name = command ;
  }
  
  FCKTableCommand.prototype.Execute = function()
  {
  	switch ( this.Name )
  	{
  		case 'TableInsertRow' :
  			FCKTableHandler.InsertRow() ;
  			break ;
  		case 'TableDeleteRows' :
  			FCKTableHandler.DeleteRows() ;
  			break ;
  		case 'TableInsertColumn' :
  			FCKTableHandler.InsertColumn() ;
  			break ;
  		case 'TableDeleteColumns' :
  			FCKTableHandler.DeleteColumns() ;
  			break ;
  		case 'TableInsertCell' :
  			FCKTableHandler.InsertCell() ;
  			break ;
  		case 'TableDeleteCells' :
  			FCKTableHandler.DeleteCells() ;
  			break ;
  		case 'TableMergeCells' :
  			FCKTableHandler.MergeCells() ;
  			break ;
  		case 'TableSplitCell' :
  			FCKTableHandler.SplitCell() ;
  			break ;
  		default :
  			alert( 'Unknown command "' + this.Name + '".' ) ;
  	}
  }
  
  FCKTableCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js
  
  Index: fcktextcolorcommand.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktextcolorcommand.js
   * 	FCKTextColorCommand Class: represents the text color comand. It shows the
   * 	color selection panel.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 22:49:33
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // FCKTextColorCommand Contructor
  //		type: can be 'ForeColor' or 'BackColor'.
  var FCKTextColorCommand = function( type )
  {
  	this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
  	this.Type = type ;
  
  	// ### BEGIN: This code should be moved to the Execute method but it doesn't work
  	// well if placed there.
  	
  	this._Panel = new FCKColorPanel( this.SetColor ) ;
  	this._Panel.Create() ;
  	
  	// ### END
  }
  
  FCKTextColorCommand.prototype.Execute = function( panelX, panelY )
  {
  	/* It was commented because it is not working well if placed here.
  	   It has been moved to the constructor, but it is not the best solution
  	   because the Panel should be created only when called.
  	
  	// Create the Color Panel if needed.
  	if ( ! this._Panel )
  	{
  		this._Panel = new FCKColorPanel( this.SetColor ) ;
  		this._Panel.Create() ;
  	}
  	*/
  
  	// We must "cache" the actual panel type to be used in the SetColor method.
  	FCK._ActiveColorPanelType = this.Type ;
  
  	// Show the Color Panel at the desired position.
  	this._Panel.Show( panelX, panelY ) ;
  }
  
  FCKTextColorCommand.prototype.SetColor = function( color )
  {
  	if ( FCK._ActiveColorPanelType == 'ForeColor' )
  		FCK.ExecuteNamedCommand( 'ForeColor', color ) ;
  	else if ( FCKBrowserInfo.IsGecko )
  		FCK.ExecuteNamedCommand( 'hilitecolor', color ) ;
  	else
  		FCK.ExecuteNamedCommand( 'BackColor', color ) ;
  	
  	// Delete the "cached" active panel type.
  	delete FCK._ActiveColorPanelType ;
  }
  
  FCKTextColorCommand.prototype.GetState = function()
  {
  	return FCK_TRISTATE_OFF ;
  }
  
  


comfuture    04/11/24 21:25:22

  Added:       util/fckeditor/editor/_source/globals fck_constants.js
                        fckeditorapi.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/_source/globals/fck_constants.js
  
  Index: fck_constants.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_constants.js
   * 	Defines some constants used by the editor. These constants are also 
   * 	globally available in the page where the editor is placed.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:48
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Editor Instance Status.
  FCK_STATUS_NOTLOADED	= window.parent.FCK_STATUS_NOTLOADED	= 0 ;
  FCK_STATUS_ACTIVE		= window.parent.FCK_STATUS_ACTIVE		= 1 ;
  FCK_STATUS_COMPLETE		= window.parent.FCK_STATUS_COMPLETE		= 2 ;
  
  // Tristate Operations.
  FCK_TRISTATE_OFF		= window.parent.FCK_TRISTATE_OFF		= 0 ;
  FCK_TRISTATE_ON			= window.parent.FCK_TRISTATE_ON			= 1 ;
  FCK_TRISTATE_DISABLED	= window.parent.FCK_TRISTATE_DISABLED	= -1 ;
  
  // For unknown values.
  FCK_UNKNOWN				= window.parent.FCK_UNKNOWN				= -1000 ;
  
  // Toolbar Items Style.
  FCK_TOOLBARITEM_ONLYICON	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 0 ;
  FCK_TOOLBARITEM_ONLYTEXT	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 1 ;
  FCK_TOOLBARITEM_ICONTEXT	= window.parent.FCK_TOOLBARITEM_ONLYTEXT	= 2 ;
  
  // Edit Mode
  FCK_EDITMODE_WYSIWYG	= window.parent.FCK_EDITMODE_WYSIWYG	= 0 ;
  FCK_EDITMODE_SOURCE		= window.parent.FCK_EDITMODE_SOURCE		= 1 ;
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/globals/fckeditorapi.js
  
  Index: fckeditorapi.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditorapi.js
   * 	Create the FCKeditorAPI object that is available as a global object in
   * 	the page where the editor is placed in.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:48
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKeditorAPI ;
  
  if ( !window.parent.FCKeditorAPI )
  {
  	// Make the FCKeditorAPI object available in the parent window.
  	FCKeditorAPI = window.parent.FCKeditorAPI = new Object() ;
  	FCKeditorAPI.__Instances = new Object() ;
  
  	// Set the current version.
  	FCKeditorAPI.Version = '2.0 Beta 2' ;
  
  	// Function used to get a instance of an existing editor present in the 
  	// page.
  	FCKeditorAPI.GetInstance = function( instanceName )
  	{
  		return this.__Instances[ instanceName ] ;
  	}
  }
  else
  	FCKeditorAPI = window.parent.FCKeditorAPI ;
  
  // Add the current instance to the FCKeditorAPI's instances collection.
  FCKeditorAPI.__Instances[ FCK.Name ] = FCK ;
  
  


comfuture    04/11/24 21:25:22

  Added:       util/fckeditor/editor/_source/internals fck.js fck_1.js
                        fck_1_gecko.js fck_1_ie.js fck_2.js fck_2_gecko.js
                        fck_2_ie.js fck_last.js fck_onload.js
                        fckbrowserinfo.js fckcommands.js fckconfig.js
                        fckcontextmenu.js fckcontextmenu_gecko.js
                        fckcontextmenu_ie.js fckdebug.js fckdialog.js
                        fckdialog_gecko.js fckdialog_ie.js
                        fcklanguagemanager.js fckscriptloader.js
                        fckselection.js fckselection_gecko.js
                        fckselection_ie.js fcktablehandler.js
                        fcktablehandler_gecko.js fcktablehandler_ie.js
                        fcktoolbaritems.js fcktoolbarset.js fcktools.js
                        fcktools_gecko.js fcktools_ie.js fckurlparams.js
                        fckxhtml.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck.js
  
  Index: fck.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck.js
   * 	Creation and initialization of the "FCK" object. This is the main object
   * 	that represents an editor instance.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:48
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // FCK represents the active editor instance
  var FCK = new Object() ;
  FCK.Name			= FCKURLParams[ 'InstanceName' ] ;
  FCK.LinkedField		= window.parent.document.getElementById( FCK.Name ) ;
  
  FCK.Status			= FCK_STATUS_NOTLOADED ;
  FCK.EditMode		= FCK_EDITMODE_WYSIWYG ;
  
  FCK.PasteEnabled	= false ;
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_1.js
  
  Index: fck_1.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_1.js
   * 	This is the first part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-05 02:19:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCK.Events	= new FCKEvents( FCK ) ;
  FCK.Toolbar	= null ;
  
  FCK.SetStatus = function( newStatus )
  {
  	this.Status = newStatus ;
  	
  	if ( newStatus == FCK_STATUS_ACTIVE )
  	{
  		// Force the focus in the editor.
  		if ( FCKConfig.StartupFocus )
  			FCK.Focus() ;
  	
  	
  		
  		if ( FCKBrowserInfo.IsIE )
  			FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_2.js' ) ;
  		else
  			FCKScriptLoader.AddScript( 'js/fckeditorcode_gecko_2.js' ) ;
  			
  	}
  	
  	this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
  	if ( this.OnStatusChange ) this.OnStatusChange( newStatus ) ;
  	
  }
  
  FCK.SetHTML = function( html, forceWYSIWYG )
  {
  	if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  	{
  		// On Gecko we must disable editing before setting the innerHTML.
  		if ( FCKBrowserInfo.IsGecko )
  			FCK.EditorDocument.designMode = "off" ;
  			
  		this.EditorDocument.body.innerHTML = html ;
  	
  		if ( FCKBrowserInfo.IsGecko )
  		{
  			// On Gecko we must set the desingMode on again after setting the innerHTML.
  			FCK.EditorDocument.designMode = "on" ;
  			
  			// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
  			FCK.EditorDocument.execCommand( "useCSS", false, !FCKConfig.GeckoUseSPAN ) ;
  		}
  	}
  	else
  		document.getElementById('eSourceField').value = html ;
  }
  
  FCK.GetHTML = function()
  {
  	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  		return this.EditorDocument.body.innerHTML ;
  	else
  		return document.getElementById('eSourceField').value ;
  }
  
  FCK.GetXHTML = function()
  {
  	var bSource = ( FCK.EditMode == FCK_EDITMODE_SOURCE ) ;
  	
  	if ( bSource )
  		this.SwitchEditMode() ;
  	
  	var sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.body ) ;
  	
  	if ( bSource )
  		this.SwitchEditMode() ;
  		
  	return sXHTML ;
  }
  
  FCK.UpdateLinkedField = function()
  {
  	if ( FCKConfig.EnableXHTML )
  		FCKTools.SetLinkedFieldValue( FCK.GetXHTML() ) ;
  	else
  		FCKTools.SetLinkedFieldValue( FCK.GetHTML() ) ;
  }
  
  FCK.ShowContextMenu = function( x, y )
  {
  	if ( this.Status != FCK_STATUS_COMPLETE ) 
  		return ;
  		
  	FCKContextMenu.Show( x, y ) ;
  	this.Events.FireEvent( "OnContextMenu" ) ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_1_gecko.js
  
  Index: fck_1_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_1_gecko.js
   * 	This is the first part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 	(Gecko specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 22:47:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCK.Description = "FCKeditor for Gecko Browsers" ;
  
  FCK.StartEditor = function()
  {
  	// Get the editor's window and document (DOM)
  	this.EditorWindow	= window.frames[ 'eEditorArea' ] ;
  	this.EditorDocument	= this.EditorWindow.document ;
  	
  	// Sets the editor's startup contents
  	this.SetHTML( FCKTools.GetLinkedFieldValue() ) ;
  
  	// Attach the editor to the form onsubmit event
  	FCKTools.AttachToLinkedFieldFormSubmit( this.UpdateLinkedField ) ;
  
  	// Disable Right-Click
  	var oOnContextMenu = function( e )
  	{
  		e.preventDefault() ;
  		FCK.ShowContextMenu( e.clientX, e.clientY ) ;
  	}
  	this.EditorDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
  
  	var oOnKeyDown = function( e )
  	{
  		if ( e.ctrlKey && !e.shiftKey && !e.altKey )
  		{
  			// Char 86/118 = V/v
  			if ( e.which == 86 || e.which == 118 )
  			{
  				if ( FCK.Status == FCK_STATUS_COMPLETE )
  				{
  					if ( !FCK.Events.FireEvent( "OnPaste" ) )
  						e.preventDefault() ;
  				}
  				else
  					e.preventDefault() ;
  			}
  		}
  	}
  	this.EditorDocument.addEventListener( 'keydown', oOnKeyDown, true ) ;
  	
  	var oOnSelectionChange = function( e )
  	{
  		/*
  		var bIsDifferent = false ;
  		var oActualSel = FCK.EditorWindow.getSelection() ;
  
  		if ( FCK.LastSelection )
  		{
  			if ( FCK.LastSelection.rangeCount != oActualSel.rangeCount )
  			{
  				bIsDifferent = true ;
  			}
  			else
  			{
  				if ( oActualSel.rangeCount == 1 )
  				{
  					var oRangeA = oActualSel.getRangeAt(0) ;
  					var oRangeB = FCK.LastSelection.getRangeAt(0) ;
  					
  					FCKDebug.Output( 'collapsed: ' + oRangeA.collapsed ) ;
  					if ( oRangeA.collapsed )
  					{
  						FCKDebug.Output( 'startContainerBranch: ' + oRangeA.startContainerBranch + ' == ' + oRangeB.startContainerBranch ) ;
  						FCKDebug.Output( 'Container: ' + oRangeA.startContainer.childNodes[ oRangeA.startOffset ] + ' == ' + oRangeB.commonAncestorContainer.parent ) ;
  						if 
  						( 
  							!oRangeB.collapsed ||
  							oRangeA.startContainer.childNodes[ oRangeA.startOffset ] != oRangeB.startContainer.childNodes[ oRangeB.startOffset ] ||
  							oRangeA.commonAncestorContainer.parent != oRangeB.commonAncestorContainer.parent )
  						{
  							bIsDifferent = true ;
  						}
  					}
  					else
  					{
  						bIsDifferent = true ;
  					}
  				}
  				else
  				{
  					bIsDifferent == true ;
  				}
  			}
  		}
  		else
  		{
  			bIsDifferent = true ;
  		}
  		
  		FCK.LastSelection = oActualSel ;
  		
  		FCKDebug.Output( 'bIsDifferent: ' + bIsDifferent ) ;
  		
  		if ( bIsDifferent )
  		{*/
  			FCK.Events.FireEvent( "OnSelectionChange" ) ;
  		//}
  	}
  	
  	this.EditorDocument.addEventListener( 'mouseup', oOnSelectionChange, false ) ;
  	this.EditorDocument.addEventListener( 'keyup', oOnSelectionChange, false ) ;
  
  	this.SetStatus( FCK_STATUS_ACTIVE ) ;
  }
  
  FCK.Focus = function()
  {
  	this.EditorWindow.focus() ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_1_ie.js
  
  Index: fck_1_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_1_ie.js
   * 	This is the first part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 	(IE specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 22:48:10
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
  
  FCK.StartEditor = function()
  {
  	// Get the editor's window and document (DOM)
  	this.EditorWindow	= window.frames[ 'eEditorArea' ] ;
  	this.EditorDocument	= this.EditorWindow.document ;
  	
  	// Set the editor's startup contents
  	this.SetHTML( FCKTools.GetLinkedFieldValue() ) ;
  	
  	// Attach the editor to the form onsubmit event
  	FCKTools.AttachToLinkedFieldFormSubmit( this.UpdateLinkedField ) ;
  
  	// Set the focus to the editable area when clicking in the document area.
  	// TODO: The cursor must be positioned at the end.
  	this.EditorDocument.onmousedown = this.EditorDocument.onmouseup = function()
  	{
  		FCK.Focus() ;
  		
  		FCK.EditorWindow.event.cancelBubble	= true ;
  		FCK.EditorWindow.event.returnValue	= false ;
  	}
  	
  	// Intercept pasting operations
  	this.EditorDocument.body.onpaste = function()
  	{
  		if ( FCK.Status == FCK_STATUS_COMPLETE )
  			return FCK.Events.FireEvent( "OnPaste" ) ;
  		else
  			return false ;
  	}
  	
  	// Disable Right-Click and shows the context menu.
  	this.EditorDocument.oncontextmenu = function()
  	{
  		var e = this.parentWindow.event ;
  		FCK.ShowContextMenu( e.screenX, e.screenY ) ;
  		return false ;
  	}
  	
  	// Intercept cursor movements
  	this.EditorDocument.onselectionchange = function()
  	{
  		FCK.Events.FireEvent( "OnSelectionChange" ) ;
  	}
  
  	//Enable editing
  	this.EditorDocument.body.contentEditable = true ;
  
  	this.SetStatus( FCK_STATUS_ACTIVE ) ;
  }
  
  FCK.Focus = function()
  {
  	if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
  		FCK.EditorDocument.body.focus() ;
  	else
  		document.getElementById('eSource').focus() ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_2.js
  
  Index: fck_2.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_2.js
   * 	This is the second part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-07 01:11:37
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCK.ExecuteNamedCommand = function( commandName, commandParameter )
  {
  	FCK.Focus() ;
  	FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ; 
  	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
  }
  
  FCK.GetNamedCommandState = function( commandName )
  {
  	try
  	{
  		if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
  			return FCK_TRISTATE_DISABLED ;
  		else
  			return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
  	}
  	catch ( e )
  	{
  		return FCK_TRISTATE_OFF ;
  	}
  }
  
  FCK.GetNamedCommandValue = function( commandName )
  {
  	var sValue = '' ;
  	var eState = FCK.GetNamedCommandState( commandName ) ;
  	
  	if ( eState == FCK_TRISTATE_DISABLED ) 
  		return null ;
  	
  	try
  	{
  		sValue = this.EditorDocument.queryCommandValue( commandName ) ;
  	}
  	catch(e) {}
  	
  	return sValue ? sValue : '' ;
  }
  
  FCK.CreateLink = function( url )
  {	
  	if ( url.length == 0 )
  		FCK.ExecuteNamedCommand( 'Unlink' ) ;
  	else
  	{
  		FCK.ExecuteNamedCommand( 'CreateLink', "javascript:void(0);/*fckeditortemplink*/" ) ;
  
  		var oLinks = this.EditorDocument.links ;
  		for ( i = 0 ; i < oLinks.length ; i++ )
  		{
  			if ( oLinks[i].href == "javascript:void(0);/*fckeditortemplink*/" )
  			{
  				oLinks[i].href = url ;
  				return oLinks[i] ;
  			}
  		}
  	}
  }
  
  FCK.CleanAndPaste = function( html )
  {
  	// Remove all SPAN tags
  	html = html.replace(/<\/?SPAN[^>]*>/gi, "" );
  	// Remove Class attributes
  	html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  	// Remove Style attributes
  	html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
  	// Remove Lang attributes
  	html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  	// Remove XML elements and declarations
  	html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
  	// Remove Tags with XML namespace declarations: <o:p></o:p>
  	html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
  	// Replace the &nbsp;
  	html = html.replace(/&nbsp;/, " " );
  	// Transform <P> to <DIV>
  	var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ;	// Different because of a IE 5.0 error
  	html = html.replace( re, "<div$2</div>" ) ;
  	
  	FCK.InsertHtml( html ) ;
  }
  
  FCK.Preview = function()
  {
  	var oWindow = window.open( '', null, 'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes' ) ;
  	
  	oWindow.document.write( FCK.GetHTML() );
  	oWindow.document.close();
  		
  	// TODO: The CSS of the editor area must be configurable.
  	// oWindow.document.createStyleSheet( config.EditorAreaCSS );
  }
  
  FCK.SwitchEditMode = function()
  {
  	// Check if the actual mode is WYSIWYG.
  	var bWYSIWYG = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
  	
  	// Display/Hide the TRs.
  	document.getElementById('eWysiwyg').style.display	= bWYSIWYG ? "none" : "" ;
  	document.getElementById('eSource').style.display	= bWYSIWYG ? "" : "none" ;
  
  	// Update the HTML in the view output to show.
  	if ( bWYSIWYG )
  		document.getElementById('eSourceField').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML() : FCK.GetHTML() ) ;
  	else
  		FCK.SetHTML( FCK.GetHTML(), true ) ;
  
  	// Updates the actual mode status.
  	FCK.EditMode = bWYSIWYG ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
  	
  	// Set the Focus.
  	FCK.Focus() ;
  	
  	// Update the toolbar.
  	FCKToolbarSet.RefreshItemsState() ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_2_gecko.js
  
  Index: fck_2_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_2_gecko.js
   * 	This is the second part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 	(Gecko specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:17:33
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // GetNamedCommandState overload for Gecko.
  FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
  FCK.GetNamedCommandState = function( commandName )
  {
  	switch ( commandName )
  	{
  		case 'Unlink' :
  			return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
  		default :
  			return FCK._BaseGetNamedCommandState( commandName ) ;
  	}
  }
  
  // ExecuteNamedCommand overload for Gecko.
  FCK._BaseExecuteNamedCommand = FCK.ExecuteNamedCommand ;
  FCK.ExecuteNamedCommand = function( commandName, commandParameter )
  {
  	switch ( commandName )
  	{
  		case 'Print' :
  			FCK.EditorWindow.print() ;
  			break ;
  		case 'Paste' :
  			try			{ if ( FCK.Paste() ) FCK._BaseExecuteNamedCommand( 'Paste' ) ; }
  			catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute pasting operations. Please use the keyboard for that (Ctrl+V)." ) ; }
  			break ;
  		case 'Cut' :
  			try			{ FCK._BaseExecuteNamedCommand( 'Cut' ) ; }
  			catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute cutting operations. Please use the keyboard for that (Ctrl+X)." ) ; }
  			break ;
  		case 'Copy' :
  			try			{ FCK._BaseExecuteNamedCommand( 'Copy' ) ; }
  			catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute copying operations. Please use the keyboard for that (Ctrl+C)." ) ; }
  			break ;
  		default :
  			FCK._BaseExecuteNamedCommand( commandName, commandParameter ) ;
  	}
  }
  
  FCK.AttachToOnSelectionChange = function( functionPointer )
  {
  	this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
  }
  
  FCK.Paste = function()
  {
  	if ( FCKConfig.ForcePasteAsPlainText )
  	{
  		FCK.PasteAsPlainText() ;	
  		return false ;
  	}
  	else if ( FCKConfig.AutoDetectPasteFromWord && FCKBrowserInfo.IsIE55OrMore )
  	{
  		var sHTML = FCK.GetClipboardHTML() ;
  		var re = /<\w[^>]* class="?MsoNormal"?/gi ;
  		if ( re.test( sHTML ) )
  		{
  			if ( confirm( FCKLang["PasteWordConfirm"] ) )
  			{
  				FCK.CleanAndPaste( sHTML ) ;
  				return false ;
  			}
  		}
  	}
  	else
  		return true ;
  }
  
  //**
  // FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
  // selected content if any.
  FCK.InsertHtml = function( html )
  {
  	// Delete the actual selection.
  	var oSel = FCKSelection.Delete() ;
  	
  //	var oContainer	= oSel.getRangeAt(0).startContainer ;
  //	var iOffSet		= oSel.getRangeAt(0).startOffset ;
  	
  	// Get the first available range.
  	var oRange = oSel.getRangeAt(0) ;
  	
  //	var oRange = this.EditorDocument.createRange() ;
  //	oRange.setStart( oContainer, iOffSet ) ;
  //	oRange.setEnd( oContainer, iOffSet ) ;
  	
  	// Create a fragment with the input HTML.
  	var oFragment = oRange.createContextualFragment( html ) ;
  	
  	// Get the last available node.
  	var oLastNode = oFragment.lastChild ;
  
  	// Insert the fragment in the range.
  	oRange.insertNode(oFragment) ;
  	
  	// Set the cursor after the inserted fragment.
  	oRange.setEndAfter( oLastNode ) ;
  	oRange.setStartAfter( oLastNode ) ;
  	
  	oSel.removeAllRanges() ;
  	oSel = FCK.EditorWindow.getSelection() ;
  	oSel.addRange( oRange ) ;
  		
  	this.Focus() ;
  }
  
  FCK.InsertElement = function( element )
  {
  	// Deletes the actual selection.
  	var oSel = FCKSelection.Delete() ;
  	
  	// Gets the first available range.
  	var oRange = oSel.getRangeAt(0) ;
  	
  	// Inserts the element in the range.
  	oRange.insertNode( element ) ;
  	
  	// Set the cursor after the inserted fragment.
  	oRange.setEndAfter( element ) ;
  	oRange.setStartAfter( element ) ;
  
  	this.Focus() ;
  }
  
  FCK.PasteAsPlainText = function()
  {
  	// TODO: Implement the "Paste as Plain Text" code.
  	
  	FCKDialog.OpenDialog( 'FCKDialog_Paste', 'Paste as Plain Text', 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
  	
  /*
  	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
  	sText = sText.replace( /\n/g, '<BR>' ) ;
  	this.InsertHtml( sText ) ;	
  */
  }
  
  FCK.PasteFromWord = function()
  {
  	// TODO: Implement the "Paste as Plain Text" code.
  	
  	FCKDialog.OpenDialog( 'FCKDialog_Paste', 'Paste from Word', 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
  
  //	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
  }
  
  FCK.GetClipboardHTML = function()
  {
  	return '' ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_2_ie.js
  
  Index: fck_2_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_2_ie.js
   * 	This is the second part of the "FCK" object creation. This is the main
   * 	object that represents an editor instance.
   * 	(IE specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 11:40:29
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCK.Paste = function()
  {
  	if ( FCKConfig.ForcePasteAsPlainText )
  	{
  		FCK.PasteAsPlainText() ;	
  		return false ;
  	}
  	else if ( FCKConfig.AutoDetectPasteFromWord && FCKBrowserInfo.IsIE55OrMore )
  	{
  		var sHTML = FCK.GetClipboardHTML() ;
  		var re = /<\w[^>]* class="?MsoNormal"?/gi ;
  		if ( re.test( sHTML ) )
  		{
  			if ( confirm( FCKLang["PasteWordConfirm"] ) )
  			{
  				FCK.CleanAndPaste( sHTML ) ;
  				return false ;
  			}
  		}
  	}
  	else
  		return true ;
  }
  
  FCK.PasteAsPlainText = function()
  {
  	// Get the data available in the clipboard and encodes it in HTML.
  	var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
  
  	// Replace the carriage returns with <BR>
  	sText = sText.replace( /\n/g, '<BR>' ) ;
  	
  	// Insert the resulting data in the editor.
  	this.InsertHtml( sText ) ;	
  }
  
  FCK.PasteFromWord = function()
  {
  	FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
  }
  
  FCK.InsertHtml = function( html )
  {
  	FCK.Focus() ;
  	var oSel = FCKSelection.Delete() ;
  	oSel.createRange().pasteHTML( html ) ; 
  	
  }
  
  FCK.InsertElement = function( element )
  {
  	FCK.InsertHtml( element.outerHTML ) ;
  }
  
  FCK.GetClipboardHTML = function()
  {
  	var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
  	
  	if ( !oDiv )
  	{
  		var oDiv = document.createElement( 'DIV' ) ;
  		oDiv.id = '___FCKHiddenDiv' ;
  		oDiv.style.visibility	= 'hidden' ;
  		oDiv.style.overflow		= 'hidden' ;
  		oDiv.style.position		= 'absolute' ;
  		oDiv.style.width		= 1 ;
  		oDiv.style.height		= 1 ;
  	
  		document.body.appendChild( oDiv ) ;
  	}
  	
  	oDiv.innerHTML = '' ;
  	
  	var oTextRange = document.body.createTextRange() ;
  	oTextRange.moveToElementText( oDiv ) ;
  	oTextRange.execCommand( 'Paste' ) ;
  	
  	var sData = oDiv.innerHTML ;
  	oDiv.innerHTML = '' ;
  	
  	return sData ;
  }
  
  FCK.AttachToOnSelectionChange = function( functionPointer )
  {
  	FCK.EditorDocument.attachEvent( 'onselectionchange', functionPointer ) ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_last.js
  
  Index: fck_last.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_last.js
   * 	These are the last script lines executed in the editor loading process.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:49
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // This is the last file loaded to complete the editor initialization and activation
  
  // Activate pasting operations.
  if ( FCKConfig.ForcePasteAsPlainText )
  	FCK.Events.AttachEvent( "OnPaste", FCK.Paste ) ;
  
  // Load the Toolbar
  FCKToolbarSet.Name = FCKURLParams['Toolbar'] || 'Default' ;
  FCKToolbarSet.Load( FCKToolbarSet.Name ) ;
  FCKToolbarSet.Restart() ;
  
  FCK.AttachToOnSelectionChange( FCKToolbarSet.RefreshItemsState ) ;
  
  // Set some object references to the editor instance object (FCK).
  FCK.Config		= FCKConfig ;
  FCK.ToolbarSet	= FCKToolbarSet ;
  
  FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
  
  // Call the special "FCKeditor_OnComplete" function that should be present in 
  // the HTML page where the editor is located.
  if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
  	window.parent.FCKeditor_OnComplete( FCK ) ;
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fck_onload.js
  
  Index: fck_onload.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_onload.js
   * 	This is the script that is called when the editor page is loaded inside
   * 	its IFRAME. It's the editor startup.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-10 01:48:31
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Disable the context menu in the editor (areas outside the editor area).
  window.document.oncontextmenu = function( e )
  {
  	if ( e )
  		e.preventDefault() ;	// This is the Gecko way to do that.
  	return false ;				// This is the IE way to do that.
  }
  
  // Gecko browsers doens't calculate well that IFRAME size so we must 
  // recalculate it every time the window size changes.
  if ( ! FCKBrowserInfo.IsIE )
  {
  	window.onresize = function()
  	{
  		var oFrame = document.getElementById("eEditorArea") ;
  		oFrame.height = 0 ;
  
  		var oCell = document.getElementById("eWysiwygCell") ;	
  		var iHeight = oCell.offsetHeight ;
  		
  		oFrame.height = iHeight - 2 ;
  	}
  }
  
  // Start the editor as soon as the window is loaded.
  window.onload = function()
  {
  	FCKScriptLoader.OnEmpty = function()
  	{
  		// Override the configurations passed throw the hidden field.
  		FCKConfig.LoadHiddenField() ;
  		
  		// Load the styles for the configured skin.
  		LoadStyles() ;
  	}
  
  	// First of all load the configuration file.
  	FCKScriptLoader.AddScript( '../fckconfig.js' ) ;
  }
  
  function LoadStyles()
  {
  	FCKScriptLoader.OnEmpty = LoadScripts ;
  
  	// Load the active skin CSS.
  	FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_editor.css' ) ;
  	FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
  }
  
  function LoadScripts()
  {
  	FCKScriptLoader.OnEmpty = null ;
  	
  	
  	if ( FCKBrowserInfo.IsIE )
  		FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_1.js' ) ;
  	else
  		FCKScriptLoader.AddScript( 'js/fckeditorcode_gecko_1.js' ) ;
  }
  
  function LoadLanguageFile()
  {
  	FCKScriptLoader.OnEmpty = function()
  	{
  		// Removes the OnEmpty listener.
  		this.OnEmpty = null ;
  		
  		// Correct the editor layout to the correct language direction.
  		window.document.dir = FCKLang.Dir ;
  		
  		// Starts the editor.
  		FCK.StartEditor() ;
  	}
  	
  	FCKScriptLoader.AddScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckbrowserinfo.js
  
  Index: fckbrowserinfo.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckbrowserinfo.js
   * 	Defines the FCKBrowserInfo object that hold some browser informations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:49
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKBrowserInfo = new Object() ;
  
  var sAgent = navigator.userAgent.toLowerCase() ;
  
  FCKBrowserInfo.IsIE		= sAgent.indexOf("msie") != -1 ;
  FCKBrowserInfo.IsGecko	= ! FCKBrowserInfo.IsIE ;
  
  if ( FCKBrowserInfo.IsIE )
  {
  	FCKBrowserInfo.MajorVer = navigator.appVersion.match(/MSIE (.)/)[1] ;
  	FCKBrowserInfo.MinorVer = navigator.appVersion.match(/MSIE .\.(.)/)[1] ;
  }
  else
  {
  	// TODO: Other browsers
  	FCKBrowserInfo.MajorVer = 0 ;
  	FCKBrowserInfo.MinorVer = 0 ;
  }
  	
  FCKBrowserInfo.IsIE55OrMore = FCKBrowserInfo.IsIE && ( FCKBrowserInfo.MajorVer > 5 || FCKBrowserInfo.MinorVer >= 5 ) ;
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckcommands.js
  
  Index: fckcommands.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcommands.js
   * 	Define all commands available in the editor.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 00:56:46
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKCommands = new Object() ;
  
  /*
  Instead of adding a line like this for every named command:
  FCKCommands['Bold'] = new FCKNamedCommand( 'Bold' ) ;
  ... an Array was created to simplify the code (and reduce its size).
  */
  var sNamedCommands = [ 
  	'Cut','Copy','Paste','Print','Find','SelectAll','RemoveFormat','Unlink','Undo','Redo',
  	'Bold','Italic','Underline','StrikeThrough','Subscript','Superscript',
  	'JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','Outdent','Indent',
  	'InsertOrderedList','InsertUnorderedList','InsertHorizontalRule'] ;
  
  // Loops throw all named items.
  for ( i = 0 ; i < sNamedCommands.length ; i++ )
  {
  	FCKCommands[ sNamedCommands[i] ] = new FCKNamedCommand( sNamedCommands[i] ) ;
  }
  
  //### Other Commands.
  FCKCommands['Link']			= new FCKDialogCommand( 'Link'			, FCKLang.DlgLnkWindowTitle, 'dialog/fck_link.html'	, 400, 330, FCK.GetNamedCommandState, 'CreateLink' ) ;
  FCKCommands['About']		= new FCKDialogCommand( 'About'			, FCKLang.About, 'dialog/fck_about.html'	, 400, 330 ) ;
  
  FCKCommands['Image']		= new FCKDialogCommand( 'Image'			, 'Image Properties', 'dialog/fck_image.html'		, 450, 400, FCK.GetNamedCommandState, 'InsertImage' ) ;
  FCKCommands['Table']		= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html'		, 400, 250 ) ;
  FCKCommands['TableProp']	= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html?Parent', 400, 250 ) ;
  FCKCommands['SpecialChar']	= new FCKDialogCommand( 'SpecialChar'	, 'Select Character', 'dialog/fck_specialchar.html'	, 400, 300, FCK.GetNamedCommandState, 'InsertImage' ) ;
  FCKCommands['Smiley']		= new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle, 'dialog/fck_smiley.html'	, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight, FCK.GetNamedCommandState, 'InsertImage' ) ;
  
  FCKCommands['FontName']		= new FCKFontNameCommand() ;
  FCKCommands['FontSize']		= new FCKFontSizeCommand() ;
  FCKCommands['FontFormat']	= new FCKFormatBlockCommand() ;
  
  FCKCommands['Source']		= new FCKSourceCommand() ;
  FCKCommands['Preview']		= new FCKPreviewCommand() ;
  FCKCommands['Save']			= new FCKSaveCommand() ;
  FCKCommands['NewPage']		= new FCKNewPageCommand() ;
  
  FCKCommands['TextColor']	= new FCKTextColorCommand('ForeColor') ;
  FCKCommands['BGColor']		= new FCKTextColorCommand('BackColor') ;
  
  FCKCommands['PasteText']	= new FCKPastePlainTextCommand() ;
  FCKCommands['PasteWord']	= new FCKPasteWordCommand() ;
  
  FCKCommands['TableInsertRow']		= new FCKTableCommand('TableInsertRow') ;
  FCKCommands['TableDeleteRows']		= new FCKTableCommand('TableDeleteRows') ;
  FCKCommands['TableInsertColumn']	= new FCKTableCommand('TableInsertColumn') ;
  FCKCommands['TableDeleteColumns']	= new FCKTableCommand('TableDeleteColumns') ;
  FCKCommands['TableInsertCell']		= new FCKTableCommand('TableInsertCell') ;
  FCKCommands['TableDeleteCells']		= new FCKTableCommand('TableDeleteCells') ;
  FCKCommands['TableMergeCells']		= new FCKTableCommand('TableMergeCells') ;
  FCKCommands['TableSplitCell']		= new FCKTableCommand('TableSplitCell') ;
  
  // Generic Undefined command (usually used when a command is under development).
  FCKCommands['Undefined']	= new FCKUndefinedCommand() ;
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckconfig.js
  
  Index: fckconfig.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckconfig.js
   * 	Creates and initializes the FCKConfig object.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:49
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKConfig = new Object() ;
  
  // Editor Base Path
  if ( document.location.protocol == 'file:' )
  {
  	FCKConfig.BasePath = document.location.pathname.substr(1) ;
  	FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
  	FCKConfig.BasePath = 'file://' + FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1) ;
  }
  else
  	FCKConfig.BasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1) ;
  
  // Override the actual configuration values with the values passed throw the 
  // hidden field "<InstanceName>___Config".
  FCKConfig.LoadHiddenField = function()
  {
  	// Get the hidden field.
  	var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
  	
  	// Do nothing if the config field was not defined.
  	if ( ! oConfigField ) return ;
  
  	var aCouples = oConfigField.value.split('&') ;
  
  	for ( var i = 0 ; i < aCouples.length ; i++ )
  	{
  		var aConfig = aCouples[i].split('=') ;
  		var sConfigName  = aConfig[0] ;
  		var sConfigValue = aConfig[1] ;
  
  		if ( sConfigValue == "true" )			// If it is a boolean TRUE.
  			FCKConfig[sConfigName] = true ;
  		else if ( sConfigValue == "false" )		// If it is a boolean FALSE.
  			FCKConfig[sConfigName] = false ;
  		else if ( ! isNaN(sConfigValue) )		// If it is a number.
  			FCKConfig[sConfigName] = parseInt( sConfigValue ) ;
  		else									// In any other case it is a string.
  			FCKConfig[sConfigName] = sConfigValue ;
  	}
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckcontextmenu.js
  
  Index: fckcontextmenu.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenu.js
   * 	Defines the FCKContextMenu object that is responsible for all 
   * 	Context Menu operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-07 01:01:03
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKContextMenu = new Object() ;
  
  // This property is internally used to indicate that the context menu has been created.
  FCKContextMenu._IsLoaded = false ;
  
  // This method creates the context menu inside a DIV tag. Take a look at the end of this file for a sample output.
  FCKContextMenu.Reload = function()
  {
  	// Create the Main DIV that holds the Context Menu.
  	this._Div = this._Document.createElement( 'DIV' ) ;
  	this._Div.className			= 'CM_ContextMenu' ;
  	this._Div.style.position	= 'absolute' ;
  	this._Div.style.visibility	= 'hidden' ;
  	this._Document.body.appendChild( this._Div );
  	
  	// Create the main table for the menu items.
  	var oTable = this._Document.createElement( 'TABLE' ) ;
  	oTable.cellSpacing = 0 ;
  	oTable.cellPadding = 0 ;
  	oTable.border = 0 ;
  	this._Div.appendChild( oTable ) ;
  
  	// Create arrays with all Items to add.
  	
  	this.Groups = new Object() ;
  	
  	// Generic items that are always available.
  	this.Groups['Generic'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Generic'] )
  	{
  		Add( new FCKContextMenuItem( this, 'Cut'	, FCKLang['Cut']	, true ) ) ;
  		Add( new FCKContextMenuItem( this, 'Copy'	, FCKLang['Copy']	, true ) ) ;
  		Add( new FCKContextMenuItem( this, 'Paste'	, FCKLang['Paste']	, true ) ) ;
  	}
  	
  	// Link operations.
  	this.Groups['Link'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Link'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'Link'	, FCKLang['EditLink']	, true ) ) ;
  		Add( new FCKContextMenuItem( this, 'Unlink'	, FCKLang['RemoveLink']	, true ) ) ;
  	}
  
  	// Table Cell operations.	
  	this.Groups['TableCell'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['TableCell'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'TableInsertRow', FCKLang["InsertRow"], true ) ) ;
  		Add( new FCKContextMenuItem( this, 'TableDeleteRows', FCKLang["DeleteRows"], true ) ) ;
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'TableInsertColumn', FCKLang["InsertColumn"], true ) ) ;
  		Add( new FCKContextMenuItem( this, 'TableDeleteColumns', FCKLang["DeleteColumns"], true ) ) ;
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'TableInsertCell', FCKLang["InsertCell"], true ) ) ;
  		Add( new FCKContextMenuItem( this, 'TableDeleteCells', FCKLang["DeleteCells"], true ) ) ;
  //		Add( new FCKContextMenuItem( this, 'TableMergeCells', FCKLang["MergeCells"], true ) ) ;
  //		Add( new FCKContextMenuItem( this, 'TableSplitCell', FCKLang["SplitCell"], true ) ) ;
  		Add( new FCKContextMenuSeparator() ) ;
  //		Add( new FCKContextMenuItem( this, 'Undefined', FCKLang["CellProperties"] ) ) ;
  		Add( new FCKContextMenuItem( this, 'TableProp', FCKLang["TableProperties"], true ) ) ;
  	}
  
  	// Table operations.	
  	this.Groups['Table'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Table'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'Table', FCKLang["TableProperties"], true ) ) ;
  	}
  	
  	// Image operations.
  	this.Groups['Image'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Image'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'Image', FCKLang["ImageProperties"], true ) ) ;
  	}
  	
  	// Select field operations.
  	this.Groups['Select'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Select'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'Undefined', "Selection Field Properties" ) ) ;
  	}
  
  	// Textarea operations.
  	this.Groups['Textarea'] = new FCKContextMenuGroup() ;
  	with ( this.Groups['Textarea'] )
  	{
  		Add( new FCKContextMenuSeparator() ) ;
  		Add( new FCKContextMenuItem( this, 'Undefined', "Textarea Properties" ) ) ;
  	}
  	
  	// Create all table rows (representing the items) in the context menu.
  	for ( var o in this.Groups )
  	{
  		this.Groups[o].CreateTableRows( oTable ) ;
  	}
  
  	this._IsLoaded = true ;
  }
  
  FCKContextMenu.RefreshState = function()
  {
    	// Get the actual selected tag (if any).
  	var oTag = FCKSelection.GetSelectedElement() ;
  	var sTagName ;
  	
  	if ( oTag )
  	{
  		sTagName = oTag.tagName ;
  	}
  
  	// Set items visibility.
  	this.Groups['Link'].SetVisible( FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) ;
  	this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' && FCKSelection.HasAncestorNode('TABLE') ) ;
  	this.Groups['Table'].SetVisible( sTagName == 'TABLE' ) ;
  	this.Groups['Image'].SetVisible( sTagName == 'IMG' ) ;
  	this.Groups['Select'].SetVisible( sTagName == 'SELECT' ) ;
  	this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' ) ;
  	
  	// Refresh the state of all visible items (active/disactive)	
  	for ( var o in this.Groups )
  	{
  		this.Groups[o].RefreshState() ;
  	}
  }
  
  /*
  Sample Context Menu Output
  -----------------------------------------
  <div class="CM_ContextMenu">
  	<table cellSpacing="0" cellPadding="0" border="0">
  		<tr class="CM_Disabled">
  			<td class="CM_Icon"><img alt="" src="icons/button.cut.gif" width="21" height="20" unselectable="on"></td>
  			<td class="CM_Label" unselectable="on">Cut</td>
  		</tr>
  		<tr class="CM_Disabled">
  			<td class="CM_Icon"><img height="20" alt="" src="icons/button.copy.gif" width="21"></td>
  			<td class="CM_Label">Copy</td>
  		</tr>
  		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  			<td class="CM_Icon"><img height="20" alt="" src="icons/button.paste.gif" width="21"></td>
  			<td class="CM_Label">Paste</td>
  		</tr>
  		<tr class="CM_Separator">
  			<td class="CM_Icon"></td>
  			<td class="CM_Label"><div></div></td>
  		</tr>
  		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  			<td class="CM_Icon"><img height="20" alt="" src="icons/button.print.gif" width="21"></td>
  			<td class="CM_Label">Print</td>
  		</tr>
  		<tr class="CM_Separator">
  			<td class="CM_Icon"></td>
  			<td class="CM_Label"><div></div></td>
  		</tr>
  		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  			<td class="CM_Icon"></td>
  			<td class="CM_Label">Do Something</td>
  		</tr>
  		<tr class="CM_Option" onmouseover="OnOver(this);" onmouseout="OnOut(this);">
  			<td class="CM_Icon"></td>
  			<td class="CM_Label">Just Testing</td>
  		</tr>
  	</table>
  </div>
  */
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckcontextmenu_gecko.js
  
  Index: fckcontextmenu_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenu_gecko.js
   * 	Context Menu operations. (Gecko specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-27 16:58:07
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // The Context Menu CSS must be added to the parent document.
  FCKTools.AppendStyleSheet( window.parent.document, FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
  
  FCKContextMenu.Show = function( x, y )
  {
  	if ( ! this._Document )
  	{
  		this._Document = window.parent.document ;
  	}
  
  	// Create the context menu if needed.
  	if ( !this._IsLoaded ) 
  	{
  		this.Reload() ;
  		this._Div.style.zIndex = 10000 ;
  		this._Div.oncontextmenu = function() { return false ; }
  	}
  	
  	this.RefreshState() ;
  
  	// Get the editor area and editor frames positions.	
  	var oCoordsA = FCKTools.GetElementPosition( FCK.EditorWindow.frameElement ) ;
  	var oCoordsB = FCKTools.GetElementPosition( window.frameElement ) ;
  	
  	x += oCoordsA.X + oCoordsB.X ;
  	y += oCoordsA.Y + oCoordsB.Y ;
  
  	// Verifies if the context menu is completely visible.
  	var iXSpace = x + this._Div.offsetWidth - this._Div.ownerDocument.defaultView.innerWidth ;
  	var iYSpace = y + this._Div.offsetHeight - this._Div.ownerDocument.defaultView.innerHeight ;
  	
  	if ( iXSpace > 0 ) x -= this._Div.offsetWidth ;
  	if ( iYSpace > 0 ) y -= this._Div.offsetHeight ;
  	
  	// Set the context menu DIV in the specified location.
  	this._Div.style.left	= x + 'px' ;
  	this._Div.style.top		= y + 'px' ;
  
  	// Watch the "OnClick" event for all windows to close the Context Menu.
  	var oActualWindow = FCK.EditorWindow ;
  	while ( oActualWindow )
  	{
  		oActualWindow.document.addEventListener( 'click', FCKContextMenu._OnDocumentClick, false ) ;
  		if ( oActualWindow != oActualWindow.parent )
  			oActualWindow = oActualWindow.parent ;
  		else if ( oActualWindow.opener == null ) 
  			oActualWindow = oActualWindow.opener ;
  		else
  			break ;
  	}
  	
  	// Show it.
  	this._Div.style.visibility	= '' ;
  }
  
  FCKContextMenu._OnDocumentClick = function( event )
  {
  	var e = event.target ;
  	while ( e )
  	{
  		if ( e == FCKContextMenu._Div ) return ;
  		e = e.parentNode ;
  	}
  	FCKContextMenu.Hide() ;
  }
  
  FCKContextMenu.Hide = function()
  {
  	this._Div.style.visibility = 'hidden' ;
  	this._Div.style.left = this._Div.style.top = '1px' ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckcontextmenu_ie.js
  
  Index: fckcontextmenu_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckcontextmenu_ie.js
   * 	Context Menu operations. (IE specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 22:58:12
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCKContextMenu.Show = function( x, y )
  {
  	// Create the Popup used to show the menu (this is a IE 5.5+ feature).
  	if ( ! this._Popup )
  	{
  		this._Popup = window.createPopup() ;
  		this._Document = this._Popup.document ;
  		this._Document.createStyleSheet( FCKConfig.SkinPath + 'fck_contextmenu.css' ) ;
  		this._Document.oncontextmenu = function() { return false ; }
  	}
  	
  	// Create the context menu if needed.
  	if ( !this._IsLoaded ) 
  	{
  		this.Reload() ;
  		this._Div.style.visibility = '' ;
  	}
  	
  	this.RefreshState() ;
  
  	// IE doens't get the offsetWidth and offsetHeight values if the element is not visible.
  	// So the Popup must be "shown" with no size to be able to get these values.
  	this._Popup.show( x, y, 0, 0 ) ;
  	
  	// This was the previous solution. It works well to.
  	// So a temporary element is created to get this for us.
  	/*
  	if ( !this._DivCopy )
  	{
  		this._DivCopy = document.createElement( 'DIV' ) ;
  		this._DivCopy.className			= 'CM_ContextMenu' ;
  		this._DivCopy.style.position	= 'absolute' ;
  		this._DivCopy.style.visibility	= 'hidden' ;
  		document.body.appendChild( this._DivCopy );
  	}
  	
  	this._DivCopy.innerHTML = this._Div.innerHTML ;
  	*/
  	
  	// Show the Popup at the specified location.
  	this._Popup.show( x, y, this._Div.offsetWidth, this._Div.offsetHeight ) ;
  }
  
  FCKContextMenu.Hide = function()
  {
  	if ( this._Popup )
  		this._Popup.hide() ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckdebug.js
  
  Index: fckdebug.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdebug.js
   * 	Debug window control and operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:49
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKDebug = new Object() ;
  
  if ( FCKConfig.Debug )
  {
  	FCKDebug.Output = function( message, color )
  	{
  		if ( ! FCKConfig.Debug ) return ;
  		
  		if ( message != null && isNaN( message ) )
  		{
  			message = message.replace(/</g, "&lt;") ;
  		}
  
  		if ( !this.DebugWindow || this.DebugWindow.closed )
  		{
  			this.DebugWindow = window.open( 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
  		}
  		
  		if ( this.DebugWindow.Output)
  		{
  			this.DebugWindow.Output( message, color ) ;
  		}
  	}
  }
  else
  {
  	FCKDebug.Output = function() {}
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckdialog.js
  
  Index: fckdialog.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdialog.js
   * 	Dialog windows operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 01:46:34
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKDialog = new Object() ;
  
  // This method opens a dialog window using the standard dialog template.
  FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue )
  {
  	// Setup the dialog info.
  	var oDialogInfo = new Object() ;
  	oDialogInfo.Title = dialogTitle ;
  	oDialogInfo.Page = dialogPage ;
  	oDialogInfo.Editor = window ;
  	oDialogInfo.CustomValue = customValue ;	// Optional
  	
  	var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
  	this.Show( oDialogInfo, dialogName, sUrl, width, height ) ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckdialog_gecko.js
  
  Index: fckdialog_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdialog_gecko.js
   * 	Dialog windows operations. (Gecko specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight )
  {
  	var iTop  = (screen.height - dialogHeight) / 2 ;
  	var iLeft = (screen.width  - dialogWidth)  / 2 ;
  
  	var sOption  = "location=no,menubar=no,resizable=no,toolbar=no,dependent=yes" +
  		",width="  + dialogWidth +
  		",height=" + dialogHeight +
  		",top="  + iTop +
  		",left=" + iLeft ;
  	
  	var oWindow = window.open( '', 'FCKEditorDialog', sOption, true ) ;
  	oWindow.moveTo( iLeft, iTop ) ;
  	oWindow.resizeTo( dialogWidth, dialogHeight ) ;
  	oWindow.focus() ;
  	oWindow.location.href = pageUrl ;
  	
  	oWindow.dialogArguments = dialogInfo ;
  	
  	this.Window = oWindow ;
  	
  	window.top.captureEvents( Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS ) ;
  	window.top.parent.addEventListener( 'mousedown', this.CheckFocus, true ) ;
  	window.top.parent.addEventListener( 'mouseup', this.CheckFocus, true ) ;
  	window.top.parent.addEventListener( 'click', this.CheckFocus, true ) ;
  	window.top.parent.addEventListener( 'focus', this.CheckFocus, true ) ;		
  }
  
  FCKDialog.CheckFocus = function()
  {
  	if ( FCKDialog.Window && !FCKDialog.Window.closed )
  	{
  		FCKDialog.Window.focus() ;
  		return false ;
  	}
  	else
  	{
  		window.top.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS) ;
  		window.top.parent.removeEventListener( 'onmousedown', FCKDialog.CheckFocus, true ) ;
  		window.top.parent.removeEventListener( 'mouseup', FCKDialog.CheckFocus, true ) ;
  		window.top.parent.removeEventListener( 'click', FCKDialog.CheckFocus, true ) ;
  		window.top.parent.removeEventListener( 'onfocus', FCKDialog.CheckFocus, true ) ;
  	}
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckdialog_ie.js
  
  Index: fckdialog_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdialog_ie.js
   * 	Dialog windows operations. (IE specific implementations)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight )
  {
  	window.showModalDialog( pageUrl, dialogInfo, "dialogWidth:" + dialogWidth + "px;dialogHeight:" + dialogHeight + "px;help:no;scroll:no;status:no") ;
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcklanguagemanager.js
  
  Index: fcklanguagemanager.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcklanguagemanager.js
   * 	Defines the FCKLanguageManager object that is used for language 
   * 	operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-10 01:48:58
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKLanguageManager = new Object() ;
  
  FCKLanguageManager.AvailableLanguages = 
  {
  	'ar'	: 'Arabic',
  	'en'	: 'English',
  	'it'	: 'Italian'
  }
  
  FCKLanguageManager.GetActiveLanguage = function()
  {
  	if ( FCKConfig.AutoDetectLanguage )
  	{
  		// IE accepts "navigator.userLanguage" while Gecko "navigator.language".
  		var sUserLang = navigator.language ? navigator.language.toLowerCase() : navigator.userLanguage.toLowerCase() ;
  
  		FCKDebug.Output( 'Navigator Language = ' + sUserLang ) ;
  		
  		// Some language codes are set in 5 characters, 
  		// like "pt-br" for Brasilian Portuguese.
  		if ( sUserLang.length >= 5 )
  		{
  			sUserLang = sUserLang.substr(0,5) ;
  			if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
  		}
  		
  		// If the user's browser is set to, for example, "pt-br" but only the 
  		// "pt" language file is available then get that file.
  		if ( sUserLang.length >= 2 )
  		{
  			sUserLang = sUserLang.substr(0,2) ;
  			if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
  		}
  	}
  	
  	return FCKConfig.DefaultLanguage ;
  }
  
  FCKLanguageManager.TranslateElements = function( targetDocument, tag, propertyToSet )
  {
  	var aInputs = targetDocument.getElementsByTagName(tag) ;
  	for ( var i = 0 ; i < aInputs.length ; i++ )
  	{
  		if ( aInputs[i].attributes['fckLang'] )
  		{
  			var s = FCKLang[ aInputs[i].attributes["fckLang"].value ] ;
  			eval( 'aInputs[i].' + propertyToSet + ' = s' ) ;
  		}
  	}
  }
  
  FCKLanguageManager.TranslatePage = function( targetDocument )
  {
  	this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
  	this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
  	this.TranslateElements( targetDocument, 'OPTION', 'innerHTML' ) ;
  }
  
  FCKLanguageManager.ActiveLanguage = new Object() ;
  FCKLanguageManager.ActiveLanguage.Code = FCKLanguageManager.GetActiveLanguage() ;
  FCKLanguageManager.ActiveLanguage.Name = FCKLanguageManager.AvailableLanguages[ FCKLanguageManager.ActiveLanguage.Code ] ;
  
  FCK.Language = FCKLanguageManager ;
  
  
  // Load the language file and start the editor.
  LoadLanguageFile() ;
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckscriptloader.js
  
  Index: fckscriptloader.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckscriptloader.js
   * 	Defines the FCKScriptLoader object that is used to dynamically load
   * 	scripts in the editor.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // This object is used to download scripts and css files sequentialy.
  // A file download is not started until the previous file was not completelly
  // downloaded.
  var FCKScriptLoader = new Object() ;
  FCKScriptLoader.IsLoading = false ;
  FCKScriptLoader.Queue = new Array() ;
  
  // Adds a script or css to the queue.
  FCKScriptLoader.AddScript = function( scriptPath )
  {
  	FCKScriptLoader.Queue[ FCKScriptLoader.Queue.length ] = scriptPath ;
  	
  	if ( !this.IsLoading )
  		this.CheckQueue() ;
  }
  
  // Checks the queue to see if there is something to load.
  // This function should not be called by code. It's a internal function
  // that's called recursively.
  FCKScriptLoader.CheckQueue = function() 
  {
  	// Check if the queue is not empty.
  	if ( this.Queue.length > 0 )
  	{
  		this.IsLoading = true ;
  		
  		// Get the first item in the queue
  		var sScriptPath = this.Queue[0] ;
  		
  		// Removes the first item from the queue
  		var oTempArray = new Array() ;
  		for ( i = 1 ; i < this.Queue.length ; i++ )
  			oTempArray[ i - 1 ] = this.Queue[ i ] ;
  		this.Queue = oTempArray ;
  		
  //		window.status = ( 'Loading ' + sScriptPath + '...' ) ;
  
  		// Dynamically load the file (it can be a CSS or a JS)
  		var e ;
  		
  		// If is a CSS
  		if ( sScriptPath.lastIndexOf( '.css' ) > 0 )
  		{
  			e = document.createElement( 'LINK' ) ;
  			e.rel	= 'stylesheet' ;
  			e.type	= 'text/css' ;
  		}
  		// It is a JS
  		else
  		{
  			e = document.createElement( "script" ) ;
  			e.type	= "text/javascript" ;
  		}
  		
  		// Add the new object to the HEAD.
  		document.getElementsByTagName("head")[0].appendChild( e ) ; 
  
  		var oEvent = function()
  		{
  			// Gecko doesn't have a "readyState" property
  			if ( this.tagName == 'LINK' || !this.readyState || this.readyState == 'loaded' )
  				// Load the next script available in the queue
  				FCKScriptLoader.CheckQueue() ;
  		}
  		
  		// Start downloading it.
  		if ( e.tagName == 'LINK' )
  		{
  			// IE must wait for the file to be downloaded.
  			if ( FCKBrowserInfo.IsIE )
  				e.onload = oEvent ;
  			// Gecko doens't fire any event when the CSS is loaded, so we 
  			// can't wait for it.
  			else
  				FCKScriptLoader.CheckQueue() ;
  				
  			e.href = sScriptPath ;
  		}
  		else
  		{
  			// Gecko fires the "onload" event and IE fires "onreadystatechange"
  			e.onload = e.onreadystatechange = oEvent ;
  			e.src = sScriptPath ;
  		}
  	}
  	else
  	{
  		this.IsLoading = false ;
  		
  		// Call the "OnEmpty" event.
  		if ( this.OnEmpty ) 
  			this.OnEmpty() ;
  	}
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckselection.js
  
  Index: fckselection.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckselection.js
   * 	Active selection functions.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKSelection = new Object() ;
  
  FCK.Selection = FCKSelection ;
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckselection_gecko.js
  
  Index: fckselection_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckselection_gecko.js
   * 	Active selection functions. (Gecko specific implementation)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 01:13:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Retrieves the selected element (if any), just in the case that a single 
  // element is selected.
  FCKSelection.GetSelectedElement = function()
  {
  	var oSel = FCK.EditorWindow.getSelection() ;
  	if ( oSel.rangeCount == 1 )
  	{
  		var oRange = oSel.getRangeAt(0) ;
  		if ( oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 )
  			return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ;
  	}
  }
  
  FCKSelection.MoveToNode = function( node )
  {
  	var oSel = FCK.EditorWindow.getSelection() ;
  
  	for ( i = oSel.rangeCount - 1 ; i >= 0 ; i-- )
  	{
  		if ( i == 0 )
  			oSel.getRangeAt(i).selectNodeContents( node ) ;
  		else
  			oSel.removeRange( oSel.getRangeAt(i) ) ;
  	}
  }
  
  // The "nodeTagName" parameter must be Upper Case.
  FCKSelection.HasAncestorNode = function( nodeTagName )
  {
  	var oContainer = this.GetSelectedElement() ;
  	if ( ! oContainer && FCK.EditorWindow )
  	{
  		try		{ oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }
  		catch(e){}
  	}
  
  	while ( oContainer )
  	{
  		if ( oContainer.tagName == nodeTagName ) return true ;
  		oContainer = oContainer.parentNode ;
  	}
  
  	return false ;
  }
  
  // The "nodeTagName" parameter must be Upper Case.
  FCKSelection.MoveToAncestorNode = function( nodeTagName )
  {
  	var oNode ;
  	
  	var oContainer = this.GetSelectedElement() ;
  	if ( ! oContainer )
  		oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ;
  
  	while ( oContainer )
  	{
  		if ( oContainer.tagName == nodeTagName ) return oContainer ;
  		oContainer = oContainer.parentNode ;
  	}
  }
  
  FCKSelection.Delete = function()
  {
  	// Gets the actual selection.
  	var oSel = FCK.EditorWindow.getSelection() ;
  
  	// Deletes the actual selection contents.
  	for ( var i = 0 ; i < oSel.rangeCount ; i++ )
  	{
  		oSel.getRangeAt(i).deleteContents() ;
  	}
  	
  	return oSel ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckselection_ie.js
  
  Index: fckselection_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckselection_ie.js
   * 	Active selection functions. (IE specific implementation)
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 01:13:51
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Retrieves the selected element (if any), just in the case that a single 
  // element is selected.
  FCKSelection.GetSelectedElement = function()
  {
  	var oRange = FCK.EditorDocument.selection.createRange() ;
  	if ( FCK.EditorDocument.selection.type != 'Text' && oRange.length == 1)
  	{
  		return oRange.item(0) ;
  	}
  }
  
  FCKSelection.MoveToNode = function( node )
  {
  	FCK.EditorDocument.selection.empty() ;
  	var oRange = FCK.EditorDocument.selection.createRange() ;
  	oRange.moveToElementText( node ) ;
  	oRange.select() ;
  }
  
  // The "nodeTagName" parameter must be Upper Case.
  FCKSelection.HasAncestorNode = function( nodeTagName )
  {
  	var oContainer ;
  	
  	if ( FCK.EditorDocument.selection.type == "Control" )
  	{
  		oContainer = this.GetSelectedElement() ;
  	}
  	else
  	{
  		var oRange  = FCK.EditorDocument.selection.createRange() ;
  		oContainer = oRange.parentElement() ;
  	}
  
  	while ( oContainer )
  	{
  		if ( oContainer.tagName == nodeTagName ) return true ;
  		oContainer = oContainer.parentNode ;
  	}
  
  	return false ;
  }
  
  // The "nodeTagName" parameter must be Upper Case.
  FCKSelection.MoveToAncestorNode = function( nodeTagName )
  {
  	var oNode ;
  	
  	if ( FCK.EditorDocument.selection.type == "Control" )
  	{
  		var oRange = FCK.EditorDocument.selection.createRange() ;
  		for ( i = 0 ; i < oRange.length ; i++ )
  		{
  			if (oRange(i).parentNode)
  			{
  				oNode = oRange(i).parentNode ;
  				break ;
  			}
  		}
  	}
  	else
  	{
  		var oRange  = FCK.EditorDocument.selection.createRange() ;
  		oNode = oRange.parentElement() ;
  	}
  
  	while ( oNode && oNode.nodeName != nodeTagName )
  		oNode = oNode.parentNode ;
  	
  	return oNode ;
  }
  
  FCKSelection.Delete = function()
  {
  	// Gets the actual selection.
  	var oSel = FCK.EditorDocument.selection ;
  	
  	// Deletes the actual selection contents.
  	if ( oSel.type.toLowerCase() != "none" )
  	{
  		oSel.clear() ;
  	}
  	
  	return oSel ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktablehandler.js
  
  Index: fcktablehandler.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktablehandler.js
   * 	Manage table operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-07 00:42:30
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKTableHandler = new Object() ;
  
  FCKTableHandler.InsertRow = function()
  {
  	// Get the row where the selection is placed in.	
  	var oRow = FCKSelection.MoveToAncestorNode("TR") ;
  	if ( !oRow ) return ;
  
  	// Create a clone of the row.
  	var oNewRow = oRow.cloneNode( true ) ;
  
  	// Insert the new row (copy) before of it.
  	oRow.parentNode.insertBefore( oNewRow, oRow ) ;
  
  	// Clean the row (it seems that the new row has been added after it).
  	FCKTableHandler.ClearRow( oRow ) ;
  }
  
  FCKTableHandler.DeleteRows = function( row )
  {
  	// If no row has been passed as a parameer,
  	// then get the row where the selection is placed in.	
  	if ( !row )
  		row = FCKSelection.MoveToAncestorNode("TR") ;
  	if ( !row ) return ;
  
  	// Get the row's table.	
  	var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
  
  	// If just one row is available then delete the entire table.
  	if ( oTable.rows.length == 1 ) 
  	{
  		FCKTableHandler.DeleteTable( oTable ) ;
  		return ;
  	}
  
  	// Delete the row.
  	row.parentNode.removeChild( row ) ;
  }
  
  FCKTableHandler.DeleteTable = function( table )
  {
  	// If no table has been passed as a parameer,
  	// then get the table where the selection is placed in.	
  	if ( !table )
  		table = FCKSelection.MoveToAncestorNode("TABLE") ;
  	if ( !table ) return ;
  
  	// Delete the table.
  	table.parentNode.removeChild( table ) ;
  }
  
  FCKTableHandler.InsertColumn = function()
  {
  	// Get the cell where the selection is placed in.
  	var oCell = FCKSelection.MoveToAncestorNode("TD") ;
  	if ( !oCell ) return ;
  	
  	// Get the cell's table.
  	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
  
  	// Get the index of the column to be created (based on the cell).
  	var iIndex = oCell.cellIndex + 1 ;
  
  	// Loop throw all rows available in the table.
  	for ( var i = 0 ; i < oTable.rows.length ; i++ )
  	{
  		// Get the row.
  		var oRow = oTable.rows[i] ;
  	
  		// If the row doens't have enought cells, ignore it.
  		if ( oRow.cells.length < iIndex )
  			continue ;
  		
  		// Create the new cell element to be added.
  		oCell = FCK.EditorDocument.createElement('TD') ;
  		oCell.innerHTML = '&nbsp;' ;
  		
  		// Get the cell that is placed in the new cell place.
  		var oBaseCell = oRow.cells[iIndex] ;
  
  		// If the cell is available (we are not in the last cell of the row).
  		if ( oBaseCell )
  		{
  			// Insert the new cell just before of it.
  			oRow.insertBefore( oCell, oBaseCell ) ;
  		}
  		else
  		{
  			// Append the cell at the end of the row.
  			oRow.appendChild( oCell ) ;
  		}
  	}
  }
  
  FCKTableHandler.DeleteColumns = function()
  {
  	// Get the cell where the selection is placed in.
  	var oCell = FCKSelection.MoveToAncestorNode("TD") ;
  	if ( !oCell ) return ;
  	
  	// Get the cell's table.	
  	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
  
  	// Get the cell index.
  	var iIndex = oCell.cellIndex ;
  
  	// Loop throw all rows (from down to up, because it's possible that some
  	// rows will be deleted).
  	for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
  	{
  		// Get the row.
  		var oRow = oTable.rows[i] ;
  		
  		// If the cell to be removed is the first one and the row has just one cell.
  		if ( iIndex == 0 && oRow.cells.length == 1 )
  		{
  			// Remove the entire row.
  			FCKTableHandler.DeleteRows( oRow ) ;
  			continue ;
  		}
  		
  		// If the cell to be removed exists the delete it.
  		if ( oRow.cells[iIndex] )
  			oRow.removeChild( oRow.cells[iIndex] ) ;
  	}
  }
  
  FCKTableHandler.InsertCell = function()
  {
  	// Get the cell where the selection is placed in.
  	var oCell = FCKSelection.MoveToAncestorNode("TD") ;
  	if ( !oCell ) return ;
  
  	// Create the new cell element to be added.
  	var oNewCell = FCK.EditorDocument.createElement("TD");
  	oNewCell.innerHTML = "&nbsp;" ;
  
  	// If it is the last cell in the row.
  	if ( oCell.cellIndex == oCell.parentNode.cells.lenght - 1 )
  	{
  		// Add the new cell at the end of the row.
  		oCell.parentNode.appendChild( oNewCell ) ;
  	}
  	else
  	{
  		// Add the new cell before the next cell (after the active one).
  		oCell.parentNode.insertBefore( oNewCell, oCell.nextSibling ) ;
  	}
  }
  
  FCKTableHandler.DeleteCell = function( cell )
  {
  	// If this is the last cell in the row.
  	if ( cell.parentNode.cells.length == 1 )
  	{
  		// Delete the entire row.
  		FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ;
  		return ;
  	}
  
  	// Delete the cell from the row.
  	cell.parentNode.removeChild( cell ) ;
  }
  
  FCKTableHandler.DeleteCells = function()
  {
  	var aCells = FCKTableHandler.GetSelectedCells() ;
  	
  	for ( var i = aCells.length - 1 ; i >= 0  ; i-- )
  	{
  		FCKTableHandler.DeleteCell( aCells[i] ) ;
  	}
  }
  
  FCKTableHandler.MergeCells = function()
  {
  	alert( 'Command not implemented.' ) ;
  }
  
  FCKTableHandler.SplitCell = function()
  {
  	alert( 'Command not implemented.' ) ;
  }
  
  FCKTableHandler.ClearRow = function( tr )
  {
  	// Get the array of row's cells.
  	var aCells = tr.cells ;
  
  	// Replace the contents of each cell with "nbsp;".
  	for ( var i = 0 ; i < aCells.length ; i++ ) 
  	{
  		aCells[i].innerHTML = '&nbsp;' ;
  	}
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktablehandler_gecko.js
  
  Index: fcktablehandler_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktablehandler_gecko.js
   * 	Manage table operations (IE specific).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-07 00:52:56
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCKTableHandler.GetSelectedCells = function()
  {
  	var aCells = new Array() ;
  
  	var oSelection = FCK.EditorWindow.getSelection() ;
  
  	// If the selection is a text.
  	if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
  	{
  		var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD' ) ;
  		
  		if ( oParent )
  		{
  			aCells[0] = oParent ;
  			return aCells ;
  		}	
  	}
  
  	for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
  	{
  		var oRange = oSelection.getRangeAt(i) ;
  		var oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ;
  		
  		if ( oCell.tagName == 'TD' )
  			aCells[aCells.length] = oCell ;
  	}
  
  	return aCells ;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktablehandler_ie.js
  
  Index: fcktablehandler_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktablehandler_ie.js
   * 	Manage table operations (IE specific).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-05 02:17:58
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  FCKTableHandler.GetSelectedCells = function()
  {
  	var aCells = new Array() ;
  
  	var oRange = FCK.EditorDocument.selection.createRange() ;
  	var oParent = oRange.parentElement() ;
  	
  	if ( oParent && oParent.tagName == "TD" )
  		aCells[0] = oParent ;
  	else
  	{
  		var oParent = FCKSelection.MoveToAncestorNode( "TABLE" ) ;
  		
  		if ( oParent )
  		{
  			// Loops throw all cells checking if the cell is, or part of it, is inside the selection
  			// and then add it to the selected cells collection.
  			for ( var i = 0 ; i < oParent.cells.length ; i++ )
  			{
  				var oCellRange = FCK.EditorDocument.selection.createRange() ;
  				oCellRange.moveToElementText( oParent.cells[i] ) ;
  				
  				if ( oRange.inRange( oCellRange ) 
  					|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
  					|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
  				{
  					aCells[aCells.length] = oParent.cells[i] ;
  				}
  			}
  		}
  	}
  	
  	return aCells ;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktoolbaritems.js
  
  Index: fcktoolbaritems.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbaritems.js
   * 	Toolbar items definitions.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:24:31
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbarItems = new Object() ;
  
  FCKToolbarItems['Source']		= new FCKToolbarButton( 'Source', 'Source', null, FCK_TOOLBARITEM_ICONTEXT, true ) ;
  FCKToolbarItems['Save']			= new FCKToolbarButton( 'Save', null, null, null, true  ) ;
  FCKToolbarItems['NewPage']		= new FCKToolbarButton( 'NewPage', null, null, null, true  ) ;
  FCKToolbarItems['Preview']		= new FCKToolbarButton( 'Preview', null, null, null, true  ) ;
  FCKToolbarItems['About']		= new FCKToolbarButton( 'About', FCKLang.About ) ;
  
  FCKToolbarItems['Cut']			= new FCKToolbarButton( 'Cut', FCKLang.Cut, null, null, true ) ;
  FCKToolbarItems['Copy']			= new FCKToolbarButton( 'Copy', FCKLang.Copy, null, null, true ) ;
  FCKToolbarItems['Paste']		= new FCKToolbarButton( 'Paste', FCKLang.Paste, null, null, true ) ;
  FCKToolbarItems['PasteText']	= new FCKToolbarButton( 'PasteText', FCKLang.PasteText ) ;
  FCKToolbarItems['PasteWord']	= new FCKToolbarButton( 'PasteWord', FCKLang.PasteWord ) ;
  FCKToolbarItems['Print']		= new FCKToolbarButton( 'Print', null, null, null, true ) ;
  FCKToolbarItems['Undo']			= new FCKToolbarButton( 'Undo', null, null, null, true ) ;
  FCKToolbarItems['Redo']			= new FCKToolbarButton( 'Redo', null, null, null, true ) ;
  FCKToolbarItems['Find']			= new FCKToolbarButton( 'Find', null, null, null, true ) ;
  FCKToolbarItems['SelectAll']	= new FCKToolbarButton( 'SelectAll', 'Select All', null, null, true ) ;
  FCKToolbarItems['RemoveFormat']	= new FCKToolbarButton( 'RemoveFormat', 'Remove Format' ) ;
  FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink' ) ;
  
  FCKToolbarItems['Bold']			= new FCKToolbarButton( 'Bold' ) ;
  FCKToolbarItems['Italic']		= new FCKToolbarButton( 'Italic' ) ;
  FCKToolbarItems['Underline']	= new FCKToolbarButton( 'Underline' ) ;
  FCKToolbarItems['StrikeThrough']= new FCKToolbarButton( 'StrikeThrough', 'Strike Through' ) ;
  FCKToolbarItems['Subscript']	= new FCKToolbarButton( 'Subscript' ) ;
  FCKToolbarItems['Superscript']	= new FCKToolbarButton( 'Superscript' ) ;
  
  FCKToolbarItems['OrderedList']	= new FCKToolbarButton( 'InsertOrderedList', 'Ordered List', 'Insert/Remove Ordered List' ) ;
  FCKToolbarItems['UnorderedList']= new FCKToolbarButton( 'InsertUnorderedList', 'Unordered List', 'Insert/Remove Unordered List' ) ;
  FCKToolbarItems['Outdent']		= new FCKToolbarButton( 'Outdent' ) ;
  FCKToolbarItems['Indent']		= new FCKToolbarButton( 'Indent' ) ;
  
  FCKToolbarItems['Link']			= new FCKToolbarButton( 'Link', 'Link', 'Create/Edit Link' ) ;
  FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink', 'Remove Link' ) ;
  
  FCKToolbarItems['Image']		= new FCKToolbarButton( 'Image', 'Image', 'Insert/Edit Image' ) ;
  FCKToolbarItems['Table']		= new FCKToolbarButton( 'Table', 'Table', 'Create/Edit Table' ) ;
  FCKToolbarItems['SpecialChar']	= new FCKToolbarButton( 'SpecialChar', 'Special Character', 'Insert Special Character' ) ;
  FCKToolbarItems['Smiley']		= new FCKToolbarButton( 'Smiley', 'Smiley', 'Insert Smiley' ) ;
  
  FCKToolbarItems['Rule']			= new FCKToolbarButton( 'InsertHorizontalRule', 'Horizontal Rule', 'Insert Horizontal Rule' ) ;
  
  FCKToolbarItems['JustifyLeft']	= new FCKToolbarButton( 'JustifyLeft', 'Align Left' ) ;
  FCKToolbarItems['JustifyCenter']= new FCKToolbarButton( 'JustifyCenter', 'Center' ) ;
  FCKToolbarItems['JustifyRight']	= new FCKToolbarButton( 'JustifyRight', 'Align Right' ) ;
  FCKToolbarItems['JustifyFull']	= new FCKToolbarButton( 'JustifyFull', 'Justify' ) ;
  
  FCKToolbarItems['FontName']		= new FCKToolbarCombo( 'FontName', FCKLang['Font'], FCKConfig.FontNames, FCKConfig.FontNames ) ;
  FCKToolbarItems['FontSize']		= new FCKToolbarCombo( 'FontSize', FCKLang['FontSize'], '1;2;3;4;5;6;7', 'xx-small;x-small;small;medium;large;x-large;xx-large' ) ;
  FCKToolbarItems['FontFormat']	= new FCKToolbarCombo( 'FontFormat', FCKLang['FontFormat'], '<P>;<DIV>;<H1>;<H2>', 'Normal (P);Normal (DIV);Heading 1;Heading 2' ) ;
  
  FCKToolbarItems['TextColor']	= new FCKToolbarPanelButton( 'TextColor' ) ;
  FCKToolbarItems['BGColor']		= new FCKToolbarPanelButton( 'BGColor' ) ;
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktoolbarset.js
  
  Index: fcktoolbarset.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktoolbarset.js
   * 	Defines the FCKToolbarSet object that is used to load and draw the 
   * 	toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKToolbarSet = new Object() ;
  
  FCKToolbarSet.Toolbars = new Array() ;
  
  FCKToolbarSet.Expand = function()
  {
  	document.getElementById( 'Collapsed' ).style.display = 'none' ;
  	document.getElementById( 'Expanded' ).style.display = '' ;
  	
  	if ( ! FCKBrowserInfo.IsIE )
  	{
  		// I had to use "setTimeout" because Gecko was not responding in a right
  		// way when calling window.onresize() directly.
  		window.setTimeout( "window.onresize()", 1 ) ;
  	}
  }
  
  FCKToolbarSet.Collapse = function()
  {
  	document.getElementById( 'Collapsed' ).style.display = '' ;
  	document.getElementById( 'Expanded' ).style.display = 'none' ;
  	
  	if ( ! FCKBrowserInfo.IsIE )
  	{
  		// I had to use "setTimeout" because Gecko was not responding in a right
  		// way when calling window.onresize() directly.
  		window.setTimeout( "window.onresize()", 1 ) ;
  	}
  }
  
  FCKToolbarSet.Restart = function()
  {
  	if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
  		this.Expand() ;
  	else
  		this.Collapse() ;
  	
  	document.getElementById( 'CollapseHandle' ).style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
  }
  
  FCKToolbarSet.Load = function( toolbarSetName )
  {
  	this.DOMElement = document.getElementById( 'eToolbar' ) ;
  	
  	var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
  	
  	if (! ToolbarSet)
  	{
  		alert( 'Toolbar set "' + toolbarSetName + '" doesn\'t exist.' ) ;
  		return ;
  	}
  	
  	this.Toolbars = new Array() ;
  	
  	for ( var x = 0 ; x < ToolbarSet.length ; x++ ) 
  	{
  		var oToolbar = new FCKToolbar() ;
  		
  		for ( var j = 0 ; j < ToolbarSet[x].length ; j++ ) 
  		{
  			var sItem = ToolbarSet[x][j] ;
  			
  			if ( sItem == '-')
  				oToolbar.AddSeparator() ;
  			else
  			{
  				var oItem = FCKToolbarItems[sItem] ;
  				if ( oItem )
  					oToolbar.AddItem( oItem ) ;
  				else
  					alert( 'Unknown toolbar item name "' + sItem + "'" ) ;
  			}
  		}
  		
  		oToolbar.AddTerminator() ;
  		
  		this.Toolbars[ this.Toolbars.length ] = oToolbar ;
  	}
  	
  	this.Redraw() ;
  }
  
  FCKToolbarSet.Redraw = function()
  {
  }
  
  FCKToolbarSet.RefreshItemsState = function()
  {
  	
  	for ( var i = 0 ; i < FCKToolbarSet.Toolbars.length ; i++ )
  	{
  		var oToolbar = FCKToolbarSet.Toolbars[i] ;
  		for ( var j = 0 ; j < oToolbar.Items.length ; j++ )
  		{
  			oToolbar.Items[j].RefreshState() ;
  		}
  	}
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktools.js
  
  Index: fcktools.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktools.js
   * 	Utility functions.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-02 02:11:14
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKTools = new Object() ;
  
  //**
  // FCKTools.GetLinkedFieldValue: Gets the value of the hidden INPUT element
  // that is associated to the editor. This element has its ID set to the 
  // editor's instance name so the user reffers to the instance name when getting
  // the posted data.
  FCKTools.GetLinkedFieldValue = function()
  {
  	return FCK.LinkedField.value ;
  }
  
  //**
  // FCKTools.SetLinkedFieldValue: Sets the value of the hidden INPUT element
  // that is associated to the editor. This element has its ID set to the 
  // editor's instance name so the user reffers to the instance name when getting
  // the posted data.
  FCKTools.SetLinkedFieldValue = function( value )
  {
  	FCK.LinkedField.value = value ;
  }
  
  //**
  // FCKTools.AttachToLinkedFieldFormSubmit: attaches a function call to the 
  // submit event of the linked field form. This function us generally used to
  // update the linked field value before submitting the form.
  FCKTools.AttachToLinkedFieldFormSubmit = function( functionPointer )
  {
  	// Gets the linked field form
  	var oForm = FCK.LinkedField.form ;
  	
  	// Return now if no form is available
  	if (!oForm) return ;
  
  	// Attaches the functionPointer call to the onsubmit event
  	if ( FCKBrowserInfo.IsIE )
  		oForm.attachEvent( "onsubmit", functionPointer ) ;
  	else
  		oForm.addEventListener( 'submit', functionPointer, true ) ;
  	
  	//**
  	// Attaches the functionPointer call to the submit method 
  	// This is done because IE doesn't fire onsubmit when the submit method is called
  	// BEGIN --
  	
  	// Creates a Array in the form object that will hold all Attached function call
  	// (in the case there are more than one editor in the same page)
  	if (! oForm.updateFCKEditor) oForm.updateFCKEditor = new Array() ;
  	
  	// Adds the function pointer to the array of functions to call when "submit" is called
  	oForm.updateFCKEditor[oForm.updateFCKEditor.length] = functionPointer ;
  	
  	// Switches the original submit method with a new one that first call all functions
  	// on the above array and the call the original submit
  	if (! oForm.originalSubmit)
  	{
  		// Creates a copy of the original submit
  		oForm.originalSubmit = oForm.submit ;
  		// Creates our replacement for the submit
  		oForm.submit = function()
  		{
  			if (this.updateFCKEditor)
  			{
  				// Calls all functions in the functions array
  				for (var i = 0 ; i < this.updateFCKEditor.length ; i++)
  					this.updateFCKEditor[i]() ;
  			}
  			// Calls the original "submit"
  			this.originalSubmit() ;
  		}
  	}
  	// END --
  }
  
  //**
  // FCKTools.AddSelectOption: Adds a option to a SELECT element.
  FCKTools.AddSelectOption = function( targetDocument, selectElement, optionText, optionValue )
  {
  	var oOption = targetDocument.createElement("OPTION") ;
  
  	oOption.text	= optionText ;
  	oOption.value	= optionValue ;	
  
  	selectElement.options.add(oOption) ;
  
  	return oOption ;
  }
  
  FCKTools.RemoveAllSelectOptions = function( selectElement )
  {
  	for ( var i = selectElement.options.length - 1 ; i >= 0 ; i-- )
  	{
  		selectElement.options.remove(i) ;
  	}
  }
  
  FCKTools.SelectNoCase = function( selectElement, value, defaultValue )
  {
  	var sNoCaseValue = value.toString().toLowerCase() ;
  	
  	for ( var i = 0 ; i < selectElement.options.length ; i++ )
  	{
  		if ( sNoCaseValue == selectElement.options[i].value.toLowerCase() )
  		{
  			selectElement.selectedIndex = i ;
  			return ;
  		}
  	}
  	
  	if ( defaultValue != null ) FCKTools.SelectNoCase( selectElement, defaultValue ) ;
  }
  
  FCKTools.HTMLEncode = function( text )
  {
  	text = text.replace( /&/g, "&amp;" ) ;
  	text = text.replace( /"/g, "&quot;" ) ;
  	text = text.replace( /</g, "&lt;" ) ;
  	text = text.replace( />/g, "&gt;" ) ;
  	text = text.replace( /'/g, "&#146;" ) ;
  
  	return text ;
  }
  
  //**
  // FCKTools.GetResultingArray: Gets a array from a string (where the elements 
  // are separated by a character), a fuction (that returns a array) or a array.
  FCKTools.GetResultingArray = function( arraySource, separator )
  {
  	switch ( typeof( arraySource ) )
  	{
  		case "string" :
  			return arraySource.split( separator ) ;
  		case "function" :
  			return separator() ;
  		default :
  			if ( isArray( arraySource ) ) return arraySource ;
  			else return new Array() ;
  	}
  }
  
  FCKTools.GetElementPosition = function( el )
  {
  	// Initializes the Coordinates object that will be returned by the function.
  	var c = { X:0, Y:0 } ;
  	
  	// Loop throw the offset chain.
  	while ( el )
  	{
  		c.X += el.offsetLeft ;
  		c.Y += el.offsetTop ;
  		
  		el = el.offsetParent ;
  	}
  	
  	// Return the Coordinates object
  	return c ;
  }
  
  FCKTools.GetElementAscensor = function( element, ascensorTagName )
  {
  	var e = element.parentNode ;
  
  	while ( e )
  	{
  		if ( e.nodeName == ascensorTagName )
  			return e ;
  
  		e = e.parentNode ;
  	}
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktools_gecko.js
  
  Index: fcktools_gecko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktools_gecko.js
   * 	Utility functions. (Gecko version).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Appends a CSS file to a document.
  FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
  {
  	var e = documentElement.createElement( 'LINK' ) ;
  	e.rel	= 'stylesheet' ;
  	e.type	= 'text/css' ;
  	e.href	= cssFileUrl ;
  	documentElement.getElementsByTagName("HEAD").item(0).appendChild( e ) ;
  }
  
  // Removes all attributes and values from the element.
  FCKTools.ClearElementAttributes = function( element )
  {
  	// Loop throw all attributes in the element
  	for ( var i = 0 ; i < element.attributes.length ; i++ )
  	{
  		// Remove the element by name.
  		element.removeAttribute( element.attributes[i].name, 0 ) ;	// 0 : Case Insensitive
  	}
  }
  
  // Returns an Array of strings with all defined in the elements inside another element.
  FCKTools.GetAllChildrenIds = function( parentElement )
  {
  	// Create the array that will hold all Ids.
  	var aIds = new Array() ;
  	
  	// Define a recursive function that search for the Ids.
  	var fGetIds = function( parent )
  	{
  		for ( var i = 0 ; i < parent.childNodes.length ; i++ )
  		{
  			var sId = parent.childNodes[i].id ;
  			
  			// Check if the Id is defined for the element.
  			if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
  			
  			// Recursive call.
  			fGetIds( parent.childNodes[i] ) ;
  		}
  	}
  	
  	// Start the recursive calls.
  	fGetIds( parentElement ) ;
  
  	return aIds ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fcktools_ie.js
  
  Index: fcktools_ie.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fcktools_ie.js
   * 	Utility functions. (IE version).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Appends a CSS file to a document.
  FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
  {
  	documentElement.createStyleSheet( cssFileUrl ) ;
  }
  
  // Removes all attributes and values from the element.
  FCKTools.ClearElementAttributes = function( element )
  {
  	element.clearAttributes() ;
  }
  
  FCKTools.GetAllChildrenIds = function( parentElement )
  {
  	var aIds = new Array() ;
  	for ( var i = 0 ; i < parentElement.all.length ; i++ )
  	{
  		var sId = parentElement.all[i].id ;
  		if ( sId && sId.length > 0 )
  			aIds[ aIds.length ] = sId ;
  	}
  	return aIds ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckurlparams.js
  
  Index: fckurlparams.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckurlparams.js
   * 	Defines the FCKURLParams object that is used to get all parameters
   * 	passed by the URL QueryString (after the "?").
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:51
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2)
  var FCKURLParams = new Object() ;
  
  var aParams = document.location.search.substr(1).split('&') ;
  for ( i = 0 ; i < aParams.length ; i++ )
  {
  	var aParam = aParams[i].split('=') ;
  	var sParamName  = aParam[0] ;
  	var sParamValue = aParam[1] ;
  
  	FCKURLParams[ sParamName ] = sParamValue ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/_source/internals/fckxhtml.js
  
  Index: fckxhtml.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckxhtml.js
   * 	Defines the FCKXHtml object, responsible for the XHTML operations.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-18 01:08:15
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKXHtml = new Object() ;
  
  FCKXHtml.GetXHTML = function( node )
  {
  	// Create the XML DOMDocument objetc.
  	if ( window.ActiveXObject )	// IE
  		this.XML = new ActiveXObject( 'Msxml2.DOMDocument' ) ;
  	else						// Gecko
  		this.XML = document.implementation.createDocument( '', '', null ) ;
  	
  	// Add a root element that holds all child nodes.
  	this.MainNode = this.XML.appendChild( this.XML.createElement( 'XHTML' ) ) ;
  	
  	// Start recursivelly calling the _AppendNode function.
  	this._AppendChildNodes( this.MainNode, node ) ;
  
  	// Get the resulting XHTML as a string.
  	var sXHTML = document.all ? this.MainNode.xml : FCKXHtml._GetGeckoNodeXml( this.MainNode ) ;
  	
  	// Strip the "XHTML" root node.
  	return sXHTML.substr( 7, sXHTML.length - 15 )  ;
  }
  
  FCKXHtml._GetGeckoNodeXml = function( node )
  {
  	// Create the XMLSerializer.
  	var oSerializer = new XMLSerializer() ;
  
  	// Return the serialized XML as a string.
  	return oSerializer.serializeToString( node ) ;
  }
  
  FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
  {
  	// There is a bug in Mozilla that returns the '_moz_dirty' as specified.
  	if ( attributeName == '_moz_dirty' )
  		return ;
  
  	// Create the attribute.
  	var oXmlAtt = this.XML.createAttribute( attributeName ) ;
  	
  	// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked".
  	if ( typeof( attributeValue ) == 'boolean' && attributeValue == true )
  		oXmlAtt.value = attributeName ;
  	else
  		oXmlAtt.value = attributeValue ;
  	
  	// Set the attribute in the node.
  	xmlNode.attributes.setNamedItem( oXmlAtt ) ;
  }
  
  FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode )
  {
  	// Get all children nodes.
  	var oChildren = htmlNode.childNodes ;
  
  	var i = 0 ;
  	while ( i < oChildren.length )
  	{
  		i += this._AppendNode( xmlNode, oChildren[i] ) ;
  	}
  }
  
  FCKXHtml._AppendNode = function( xmlNode, htmlNode )
  {
  	var iAddedNodes = 1 ;
  	
  	switch ( htmlNode.nodeType )
  	{
  		// Element Node.
  		case 1 :
  			// Create the Element.
  			var sNodeName = htmlNode.nodeName.toLowerCase() ;
  			var oNode = xmlNode.appendChild( this.XML.createElement( sNodeName ) ) ;
  
  			// Add all attributes.
  			var oAttributes = htmlNode.attributes ;
  			for ( var n = 0 ; n < oAttributes.length ; n++ )
  			{
  				var oAttribute = oAttributes[n] ;
  				if ( oAttribute.specified )
  				{
  					var sAttName	= oAttribute.nodeName.toLowerCase() ;
  					var sAttValue	= oAttribute.nodeValue ;
  
  					// The following must be done because of a bug on IE regarding the style
  					// attribute. It returns "null" for the nodeValue.
  					if ( sAttName == 'style' && document.all )
  						sAttValue = htmlNode.style.cssText ;
  					
  					this._AppendAttribute( oNode, sAttName, sAttValue ) ;
  				}
  			}
  			
  			// Proccess the node.
  			switch ( sNodeName )
  			{
  				// "SCRIPT" and "STYLE" must be a CDATA.
  				case "script" :
  				case "style" :
  					oNode.appendChild( this.XML.createCDATASection( htmlNode.text ) ) ;
  					break ;
  				
  				// There is a BUG in IE regarding the ABBR tag.
  				case "abbr" :
  					if ( document.all )
  					{
  						var oNextNode = htmlNode.nextSibling ;
  						while ( true )
  						{
  							iAddedNodes++ ;
  							if ( oNextNode && oNextNode.nodeName != '/ABBR' )
  							{
  								this._AppendNode( oNode, oNextNode ) ;
  								oNextNode = oNextNode.nextSibling ;
  							}
  							else
  								break ;
  						}
  						break ;
  					}
  					
  				// IE ignores the "COORDS" attribute so we must add it manually.
  				case "area" :
  					if ( document.all && ! oNode.attributes.getNamedItem( 'coords' ) )
  					{
  						var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
  						if ( sCoords && sCoords != '0,0,0' )
  							this._AppendAttribute( oNode, 'coords', sCoords ) ;
  					}
  				
  				case "img" :
  					// The "ALT" attribute is required for XHTML support.
  					if ( ! oNode.attributes.getNamedItem( 'alt' ) )
  						this._AppendAttribute( oNode, 'alt', '' ) ;
  				
  				// Recursivelly call the function.
  				default :
  					this._AppendChildNodes( oNode, htmlNode ) ;
  					break ;
  			}
  			break ;
  		
  		// Text Node.
  		case 3 :
  			xmlNode.appendChild( this.XML.createTextNode( htmlNode.nodeValue ) ) ;
  			break ;
  		
  		// Unknown Node type.
  		default :
  			xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;
  			break ;
  	}
  	
  	return iAddedNodes ;
  }
  
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor/css fck_editorarea.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/css/fck_editorarea.css
  
  Index: fck_editorarea.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_editorarea.css
   * 	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.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:51
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body
  {
  	font-family: Arial, Verdana, Sans-Serif;
  	font-size: 12px;
  	padding: 5px 5px 5px 5px;
  	margin: 0px;
  	border-style: none;
  	background-color: #ffffff;
  }
  
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor/dialog/css common.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/dialog/css/common.css
  
  Index: common.css
  ===================================================================
  .ImagePreviewArea
  {
  	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: 1px none;
  	font-size: 1px ;
  }
  
  .BtnUnlocked
  {
  	background-image: url(../images/unlocked.gif);
  }
  
  .BtnOver
  {
  	border: 1px outset;
  	cursor: pointer;
  	cursor: hand;
  }
  
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor/dialog fck_about.html
                        fck_colorselector.html fck_image.html fck_link.html
                        fck_paste.html fck_smiley.html fck_specialchar.html
                        fck_table.html fck_tablecell.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_about.html
  
  Index: fck_about.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_about.html
   * 	About dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:51
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<script language="javascript">
  <!--
  var oEditor = window.parent.InnerDialogLoaded() ;
  
  // Set the language direction.
  window.document.dir = oEditor.FCKLang.Dir ;
  
  // Set the Skin CSS.
  document.write( '<link href="' + oEditor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  function SendEMail()
  {
  	var eMail = 'mailto:' ;
  	eMail += 'fredck' ;
  	eMail += '@' ;
  	eMail += 'fckeditor' ;
  	eMail += '.' ;
  	eMail += 'net' ;
  	
  	window.location = eMail ;
  }
  
  window.onload = function()
  {
  	// Translate the dialog box texts.
  	oEditor.FCKLanguageManager.TranslatePage(document) ;
  }
  
  //-->
  		</script>
  	</head>
  	<body scroll="no">
  		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
  			<tr>
  				<td>
  					<img alt="" src="images/logo_fckeditor.gif" width="236" height="41" align="left">
  					<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
  						<tr>
  							<td align="center" style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
  								<span fckLang="DlgAboutVersion">version</span>
  								<br>
  								<b>2.0 Beta 2</b></td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  			<tr height="100%">
  				<td align="center">
  					Copyright (C) 2003-2004 <a href="#" onclick="SendEMail();">Frederico Caldeira 
  						Knabben</a>
  					<br>
  					<br>
  					<span fckLang="DlgAboutLicense">Licensed under the terms of the GNU Lesser General 
  						Public License</span>
  					<br>
  					<a href="http://www.opensource.org/licenses/lgpl-license.php" target="_blank">http://www.opensource.org/licenses/lgpl-license.php</a>
  					<br>
  					<br>
  					<span fckLang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/" target="_blank">
  						http://www.fckeditor.net/</a>.
  				</td>
  			</tr>
  			<tr>
  				<td align="center">
  					<img alt="" src="images/logo_fredck.gif" width="87" height="36">
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_colorselector.html
  
  Index: fck_colorselector.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_colorselector.html
   * 	Color Selection dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-01 00:02:08
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<meta name="robots" content="noindex, nofollow" />
  		<style TYPE="text/css">
  			#ColorTable		{ cursor: pointer ; cursor: hand ; }
  			#hicolor		{ height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
  			#hicolortext	{ width: 75px ; text-align: right ; margin-bottom: 7px ; }
  			#selhicolor		{ height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
  			#selcolor		{ width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
  			#btnClear		{ width: 75px ; height: 22px ; margin-bottom: 6px ; }
  			.ColorCell		{ height: 15px ; width: 15px ; }
  		</style>
  		<script type="text/javascript">
  		
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  function OnLoad()
  {
  	// First of all, translate the dialog box texts
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  	
  	CreateColorTable() ;
  	
  	window.parent.SetOkButton( true ) ;	
  	window.parent.SetScrollBar( false ) ;	
  }
  
  function CreateColorTable()
  {
  	// Get the target table.
  	var oTable = document.getElementById('ColorTable') ;
  
  	// Create the base colors array.
  	var aColors = ['00','33','66','99','cc','ff'] ;
  
  	// This function combines two ranges of three values from the color array into a row.
  	function AppendColorRow( rangeA, rangeB )
  	{
  		for ( var i = rangeA ; i < rangeA + 3 ; i++ ) 
  		{ 
  			var oRow = oTable.insertRow(-1) ; 
  
  			for ( var j = rangeB ; j < rangeB + 3 ; j++ ) 
  			{ 
  				for ( var n = 0 ; n < 6 ; n++ ) 
  				{ 
  					AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ; 
  				} 
  			} 
  		}
  	}
  
  	// This function create a single color cell in the color table.
  	function AppendColorCell( targetRow, color )
  	{
  		var oCell = targetRow.insertCell(-1) ;
  		oCell.className = 'ColorCell' ;
  		oCell.bgColor = color ;
  		
  		oCell.onmouseover = function()
  		{
  			document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
  			document.getElementById('hicolortext').innerHTML = this.bgColor ;
  		}
  		
  		oCell.onclick = function()
  		{
  			document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
  			document.getElementById('selcolor').value = this.bgColor ;
  		}
  	}
  
  	AppendColorRow( 0, 0 ) ;
  	AppendColorRow( 3, 0 ) ;
  	AppendColorRow( 0, 3 ) ;
  	AppendColorRow( 3, 3 ) ;
  
  	// Create the last row.
  	var oRow = oTable.insertRow(-1) ;
  	
  	// Create the gray scale colors cells.
  	for ( var n = 0 ; n < 6 ; n++ )
  	{
  		AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ; 
  	}
  	
  	// Fill the row with black cells.
  	for ( var i = 0 ; i < 12 ; i++ )
  	{
  		AppendColorCell( oRow, '#000000' ) ; 
  	}
  }
  
  function Clear()
  {
  	document.getElementById('selhicolor').style.backgroundColor = '' ;
  	document.getElementById('selcolor').value = '' ;
  }
  
  function ClearActual()
  {
  	document.getElementById('hicolor').style.backgroundColor = '' ;
  	document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
  }
  
  function UpdateColor()
  {
  	try		  { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
  	catch (e) { Clear() ; }
  }
  
  function Ok()
  {
  	if ( typeof(window.parent.dialogArguments.CustomValue) == 'function' )
  		window.parent.dialogArguments.CustomValue( document.getElementById('selcolor').value ) ;
  
  	return true ;
  }
  		</script>
  	</head>
  	<body onload="OnLoad()" scroll="no">
  		<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
  			<tr>
  				<td align="center" valign="middle">
  					<table border="0" cellspacing="5" cellpadding="0" width="100%">
  						<tr>
  							<td valign="top" align="center" nowrap width="100%">
  								<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
  								</table>
  							</td>
  							<td valign="top" align="left" nowrap>
  								<span fckLang="DlgColorHighlight">Highlight</span>
  								<div id="hicolor"></div>
  								<div id="hicolortext">&nbsp;</div>
  								<span fckLang="DlgColorSelected">Selected</span>
  								<div id="selhicolor"></div>
  								<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
  								<br>
  								<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
  							</td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_image.html
  
  Index: fck_image.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_image.html
   * 	Image Properties dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-19 00:24:56
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>Image Properties</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<script src="js/fck_dialog_common.js" type="text/javascript"></script>
  		<script src="js/fck_image.js" type="text/javascript"></script>
  		<link href="css/common.css" rel="stylesheet" type="text/css" />
  	</head>
  	<body scroll="no">
  		<div id="divInfo">
  			<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
  				<tr>
  					<td>
  						<table cellspacing="0" cellpadding="0" width="100%" border="0">
  							<tr>
  								<td valign="top" width="100%">
  									<span fckLang="DlgImgURL">URL</span><br>
  									<input id="txtURL" style="WIDTH: 100%" type="text" onblur="UpdatePreview();">
  								</td>
  								<td id="tdBrowse" style="DISPLAY: none" nowrap>
  									&nbsp;
  									<input id="btnBrowse" onclick="BrowseServer();" type="button"
  										value="Browse Server" fckLang="DlgImgBtnBrowse">
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  				<tr>
  					<td>
  						<span fckLang="DlgImgAlt">Short Description</span><br>
  						<input id="txtAlt" style="WIDTH: 100%" type="text"><br>
  					</td>
  				</tr>
  				<tr height="100%">
  					<td valign="top">
  						<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
  							<tr>
  								<td valign="top">
  									<br>
  									<table cellspacing="0" cellpadding="0" border="0">
  										<tr>
  											<td><span fckLang="DlgImgWidth">Width</span>&nbsp;</td>
  											<td>
  												<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);"></td>
  											<td rowspan="2">
  												<div class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';" onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );"
  													title="Lock Sizes" onclick="SwitchLock(this);"></div>
  												<div class="BtnReset" onmouseover="this.className='BtnReset BtnOver';" onmouseout="this.className='BtnReset';"
  													title="Reset Size" onclick="ResetSizes();"></div>
  											</td>
  										</tr>
  										<tr>
  											<td><span fckLang="DlgImgHeight">Height</span>&nbsp;</td>
  											<td>
  												<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);"></td>
  										</tr>
  									</table>
  									<br>
  									<table cellspacing="0" cellpadding="0" border="0">
  										<tr>
  											<td><span fckLang="DlgImgBorder">Border</span>&nbsp;</td>
  											<td>
  												<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();"></td>
  										</tr>
  										<tr>
  											<td><span fckLang="DlgImgHSpace">HSpace</span>&nbsp;</td>
  											<td>
  												<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();"></td>
  										</tr>
  										<tr>
  											<td><span fckLang="DlgImgVSpace">VSpace</span>&nbsp;</td>
  											<td>
  												<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();"></td>
  										</tr>
  										<tr>
  											<td><span fckLang="DlgImgAlign">Align</span>&nbsp;</td>
  											<td><select id="cmbAlign" onchange="UpdatePreview();">
  													<option value="" selected></option>
  													<option fckLang="DlgImgAlignLeft" value="left">Left</option>
  													<option fckLang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
  													<option fckLang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
  													<option fckLang="DlgImgAlignBaseline" value="baseline">Baseline</option>
  													<option fckLang="DlgImgAlignBottom" value="bottom">Bottom</option>
  													<option fckLang="DlgImgAlignMiddle" value="middle">Middle</option>
  													<option fckLang="DlgImgAlignRight" value="right">Right</option>
  													<option fckLang="DlgImgAlignTextTop" value="textTop">Text Top</option>
  													<option fckLang="DlgImgAlignTop" value="top">Top</option>
  												</select>
  											</td>
  										</tr>
  									</table>
  								</td>
  								<td>&nbsp;&nbsp;&nbsp;</td>
  								<td width="100%" valign="top">
  									<table cellpadding="0" cellspacing="0">
  										<tr>
  											<td><span fckLang="DlgImgPreview">Preview</span></td>
  										</tr>
  										<tr>
  											<td valign="top">
  												<div class="ImagePreviewArea">
  													<img id="imgPreview" style="DISPLAY: none">Magnus es, domine, et laudabilis 
  													valde: magna virtus tua, et sapientiae tuae non est numerus. et laudare te vult 
  													homo, aliqua portio creaturae tuae, et homo circumferens mortalitem suam, 
  													circumferens testimonium peccati sui et testimonium, quia superbis resistis: et 
  													tamen laudare te vult homo, aliqua portio creaturae tuae.tu excitas, ut laudare 
  													te delectet, quia fecisti nos ad te et inquietum est cor nostrum, donec 
  													requiescat in te. da mihi, domine, scire et intellegere, utrum sit prius 
  													invocare te an laudare te, et scire te prius sit an invocare te. sed quis te 
  													invocat nesciens te? aliud enim pro alio potest invocare nesciens. an potius 
  													invocaris, ut sciaris? quomodo autem invocabunt, in quem non crediderunt? aut 
  													quomodo credent sine praedicante? et laudabunt dominum qui requirunt eum. 
  													quaerentes enim inveniunt eum et invenientes laudabunt eum. quaeram te, domine, 
  													invocans te, et invocem te credens in te: praedicatus enim es nobis. invocat 
  													te, domine, fides mea, quam dedisti mihi, quam inspirasti mihi per humanitatem 
  													filii tui, per ministerium praedicatoris tui.
  												</div>
  											</td>
  										</tr>
  									</table>
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  			</table>
  		</div>
  		<div id="divAdvanced" style="DISPLAY: none">
  			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  				<tr>
  					<td valign="top" width="50%">
  						Id<br>
  						<input id="txtAttId" style="WIDTH: 100%" type="text">
  					</td>
  					<td width="1">&nbsp;&nbsp;</td>
  					<td valign="top">
  						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  							<tr>
  								<td width="60%">
  									Language Direction<br>
  									<select id="cmbAttLangDir" style="WIDTH: 100%">
  										<option value="" selected>&lt;not set&gt;</option>
  										<option value="ltr">Left to Right (LTR)</option>
  										<option value="rtl">Right to Left (RTL)</option>
  									</select>
  								</td>
  								<td width="1%">&nbsp;&nbsp;</td>
  								<td nowrap>Language Code<BR>
  									<INPUT id="txtAttLangCode" style="WIDTH: 100%" type="text">&nbsp;
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  				<tr>
  					<td colspan="3">&nbsp;</td>
  				</tr>
  				<tr>
  					<td colspan="3">
  						Long Description URL<br>
  						<input id="txtLongDesc" style="WIDTH: 100%" type="text">
  					</td>
  				</tr>
  				<tr>
  					<td colspan="3">&nbsp;</td>
  				</tr>
  				<tr>
  					<td valign="top">
  						Stylesheet Classes<br>
  						<input id="txtAttClasses" style="WIDTH: 100%" type="text">
  					</td>
  					<td></td>
  					<td valign="top">&nbsp;Advisory Title<BR>
  						<INPUT id="txtAttTitle" style="WIDTH: 100%" type="text">
  					</td>
  				</tr>
  			</table>
  			Style<br>
  			<input id="txtAttStyle" style="WIDTH: 100%" type="text">
  		</div>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_link.html
  
  Index: fck_link.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_link.html
   * 	Link dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-02 00:26:17
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>Link Properties</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<meta name="robots" content="noindex, nofollow" />
  		<script src="js/fck_dialog_common.js" type="text/javascript"></script>
  		<script src="js/fck_link.js" type="text/javascript"></script>
  	</head>
  	<body scroll="no">
  		<div id="divInfo" style="DISPLAY: none">Link Type<br />
  			<select id="cmbLinkType" onchange="SetLinkType(this.value);">
  				<option value="url" selected="selected">URL</option>
  				<option value="anchor">Anchor in this page</option>
  				<option value="email">E-Mail</option>
  			</select>
  			<br />
  			<br />
  			<div id="divLinkTypeUrl">
  				<table cellspacing="0" cellpadding="0" width="100%" border="0">
  					<tr>
  						<td nowrap="nowrap">Protocol<br />
  							<select id="cmbLinkProtocol">
  								<option value="http://" selected="selected">http://</option>
  								<option value="https://">https://</option>
  								<option value="ftp://">ftp://</option>
  								<option value="news://">news://</option>
  								<option value="">&lt;other&gt;</option>
  							</select>
  						</td>
  						<td nowrap="nowrap">&nbsp;</td>
  						<td nowrap="nowrap" width="100%">URL<br />
  							<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
  						</td>
  					</tr>
  				</table>
  				<br />
  				<div id="divBrowseServer">
  				<input type="button" value="Browse Server" onclick="BrowseServer();" />
  				</div>
  			</div>
  			<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
  				<div id="divSelAnchor" style="DISPLAY: none">
  					<table cellspacing="0" cellpadding="0" border="0" width="70%">
  						<tr>
  							<td colspan="3">Select an Anchor</td>
  						</tr>
  						<tr>
  							<td width="50%">
  								By Anchor Name<br />
  								<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
  									<option value="" selected="selected"></option>
  								</select>
  							</td>
  							<td>&nbsp;&nbsp;&nbsp;</td>
  							<td width="50%">
  								By Element Id<br />
  								<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
  									<option value="" selected="selected"></option>
  								</select>
  							</td>
  						</tr>
  					</table>
  				</div>
  				<div id="divNoAnchor" style="DISPLAY: none">
  					&lt;No anchors available in the document&gt;
  				</div>
  			</div>
  			<div id="divLinkTypeEMail" style="DISPLAY: none">E-Mail Address<br />
  				<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
  				Message Subject<br />
  				<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
  				Message Body<br />
  				<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
  			</div>
  		</div>
  		<div id="divUpload" style="DISPLAY: none">
  			<form method="post" target="UploadWindow" enctype="multipart/form-data" action="">
  				Upload<br />
  				<input style="WIDTH: 100%" type="file" size="40" /><br />
  				<br />
  				<input id="btnUpload" onclick="uploadFile();" type="button" value="Send it to the Server"
  					fckLang="DlgLnkBtnUpload" />
  			</form>
  		</div>
  		<div id="divTarget" style="DISPLAY: none">
  			<table cellspacing="0" cellpadding="0" width="100%" border="0">
  				<tr>
  					<td nowrap="nowrap">Target<br />
  						<select id="cmbTarget" onchange="SetTarget(this.value);">
  							<option value="" selected="selected">&lt;not set&gt;</option>
  							<option value="frame">&lt;frame&gt;</option>
  							<option value="popup">&lt;popup window&gt;</option>
  							<option value="_blank">New Window (_blank)</option>
  							<option value="_top">Topmost Window (_top)</option>
  							<option value="_self">Same Window (_self)</option>
  							<option value="_parent">Parent Window (_parent)</option>
  						</select>
  					</td>
  					<td>&nbsp;</td>
  					<td id="tdTargetFrame" nowrap="nowrap" width="100%">Target Frame Name<br />
  						<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
  							onchange="OnTargetNameChange();" />
  					</td>
  					<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">Popup 
  						Window Name<br />
  						<input id="txtPopupName" style="WIDTH: 100%" type="text" />
  					</td>
  				</tr>
  			</table>
  			<br />
  			<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
  				border="0">
  				<tr>
  					<td>Popup Window Features<br />
  						<table cellspacing="0" cellpadding="0" border="0">
  							<tr>
  								<td valign="top" nowrap="nowrap" width="50%">
  									<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable">Resizable</label><br />
  									<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar">Location 
  										Bar</label><br />
  									<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar">Menu 
  										Bar</label><br />
  									<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars">Scroll 
  										Bars</label>
  								</td>
  								<td></td>
  								<td valign="top" nowrap="nowrap" width="50%">
  									<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar">Status 
  										Bar</label><br />
  									<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar">Toolbar</label><br />
  									<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen">Full 
  										Screen (IE)</label><br />
  									<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent">Dependent 
  										(Netscape)</label>
  								</td>
  							</tr>
  							<tr>
  								<td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
  								<td></td>
  								<td valign="top" nowrap="nowrap" width="50%"></td>
  							</tr>
  							<tr>
  								<td valign="top">
  									<table cellspacing="0" cellpadding="0" border="0">
  										<tr>
  											<td nowrap="nowrap">Width</td>
  											<td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
  										</tr>
  										<tr>
  											<td nowrap="nowrap">Height</td>
  											<td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
  										</tr>
  									</table>
  								</td>
  								<td>&nbsp;&nbsp;</td>
  								<td valign="top">
  									<table cellspacing="0" cellpadding="0" border="0">
  										<tr>
  											<td nowrap="nowrap">Left Position</td>
  											<td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
  										</tr>
  										<tr>
  											<td nowrap="nowrap">Top Position</td>
  											<td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
  										</tr>
  									</table>
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  			</table>
  		</div>
  		<div id="divAttribs" style="DISPLAY: none">
  			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  				<tr>
  					<td valign="top" width="50%">
  						Id<br />
  						<input id="txtAttId" style="WIDTH: 100%" type="text" />
  					</td>
  					<td width="1"></td>
  					<td valign="top">
  						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  							<tr>
  								<td width="60%">
  									Language Direction<br />
  									<select id="cmbAttLangDir" style="WIDTH: 100%">
  										<option value="" selected="selected">&lt;not set&gt;</option>
  										<option value="ltr">Left to Right (LTR)</option>
  										<option value="rtl">Right to Left (RTL)</option>
  									</select>
  								</td>
  								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
  								<td nowrap="nowrap">Access Key<br />
  									<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  				<tr>
  					<td valign="top" width="50%">
  						Name<br />
  						<input id="txtAttName" style="WIDTH: 100%" type="text" />
  					</td>
  					<td width="1"></td>
  					<td valign="top">
  						<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  							<tr>
  								<td width="60%">
  									Language Code<br />
  									<input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
  								</td>
  								<td width="1%">&nbsp;&nbsp;&nbsp;</td>
  								<td nowrap="nowrap">
  									Tab Index<br />
  									<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
  								</td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  				<tr>
  					<td valign="top" width="50%">&nbsp;</td>
  					<td width="1"></td>
  					<td valign="top"></td>
  				</tr>
  				<tr>
  					<td valign="top" width="50%">
  						Advisory Title<br />
  						<input id="txtAttTitle" style="WIDTH: 100%" type="text" />
  					</td>
  					<td width="1">&nbsp;&nbsp;&nbsp;</td>
  					<td valign="top">
  						Advisory Content Type<br />
  						<input id="txtAttContentType" style="WIDTH: 100%" type="text" />
  					</td>
  				</tr>
  				<tr>
  					<td valign="top">
  						Stylesheet Classes<br />
  						<input id="txtAttClasses" style="WIDTH: 100%" type="text" />
  					</td>
  					<td></td>
  					<td valign="top">
  						Linked Resource Charset<br />
  						<input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
  					</td>
  				</tr>
  			</table>
  			<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
  				<tr>
  					<td>
  						Style<br />
  						<input id="txtAttStyle" style="WIDTH: 100%" type="text" />
  					</td>
  				</tr>
  			</table>
  		</div>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_paste.html
  
  Index: fck_paste.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_paste.html
   * 	This dialog is shown when, for some reason (usually security settings), 
   * 	the user is not able to paste data from the clipboard to the editor using 
   * 	the toolbar buttons or the context menu.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-31 00:02:26
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="robots" content="noindex, nofollow">
  		<script language="javascript">
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  function OnLoad()
  {
  	if ( window.parent.dialogArguments.CustomValue == 'Word' )
  	{
  		document.getElementById('frmData').style.display = '' ;
  		document.getElementById('frmData').contentDocument.designMode = 'on' ;
  	}
  	else
  		document.getElementById('txtData').style.display = '' ;
  
  	// First of all, translate the dialog box texts
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  	
  	window.parent.SetOkButton( true ) ;	
  	window.parent.SetScrollBar( false ) ;	
  }
  
  function Ok()
  {
  	if ( window.parent.dialogArguments.CustomValue == 'Word' )
  	{
  		var sHtml = document.getElementById('frmData').contentDocument.body.innerHTML ;
  		dialogArguments.FCK.CleanAndPaste( sHtml ) ;
  	}
  	else
  	{
  		var sText = dialogArguments.FCKTools.HTMLEncode( document.getElementById('txtData').value )  ;
  		sText = sText.replace( /\n/g, '<BR>' ) ;
  		dialogArguments.FCK.InsertHtml( sText ) ;
  	}
  	
  	return true ;
  }
  		</script>
  	</head>
  	<body onload="OnLoad()" scroll="no">
  		<table height="98%" cellspacing="0" cellpadding="0" width="100%" border="0">
  			<tr>
  				<td>
  					The editor was not able to automaticaly execute pasting because of the <STRONG>secutiry 
  						settings</STRONG> of your browser.
  					<BR>
  					Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) 
  					and hit <STRONG>OK</STRONG>.
  				</td>
  			</tr>
  			<tr>
  				<td valign="top" height="100%" style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid">
  					<textarea id="txtData" style="BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; DISPLAY: none; BORDER-LEFT: #000000 1px; WIDTH: 99%; BORDER-BOTTOM: #000000 1px; HEIGHT: 98%"></textarea>
  					<iframe id="frmData" height="98%" width="99%" frameborder="no" style="BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; DISPLAY: none; BORDER-LEFT: #000000 1px; BORDER-BOTTOM: #000000 1px; BACKGROUND-COLOR: #ffffff"></iframe>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_smiley.html
  
  Index: fck_smiley.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_smiley.html
   * 	Smileys (emoticons) dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 01:19:47
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<meta name="robots" content="noindex, nofollow" />
  		<style type="text/css">
  			.HandIE { cursor: hand ; }
  			.HandMozilla { cursor: pointer ; }
  		</style>
  		<script type="text/javascript">
  		
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  function setDefaults()
  {
  	// First of all, translate the dialog box texts
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  }
  
  function insertChar(td)
  {
  	dialogArguments.FCK.InsertHtml( td.innerHTML || "" ) ;
  	window.parent.Cancel() ;
  }
  
  function over(td)
  {
  	td.className = 'LightBackground HandIE HandMozilla' ;
  }
  
  function out(td)
  {
  	td.className = 'DarkBackground HandIE HandMozilla' ;
  }
  		</script>
  	</head>
  	<body onload="setDefaults()" scroll="no">
  		<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
  			<script type="text/javascript">
  <!--
  var FCKConfig = dialogArguments.FCKConfig ;
  
  var sBasePath = FCKConfig.SmileyPath ;
  var aImages   = FCKConfig.SmileyImages ;
  var cols      = FCKConfig.SmileyColumns ;
  
  var i = 0 ;
  while (i < aImages.length)
  {
  	document.write("<TR>") ;
  	for(var j = 0 ; j < cols ; j++) 
  	{
  		if (aImages[i])
  		{
  			document.write("<TD width='1%' align='center' class='DarkBackground HandIE HandMozilla' onclick='insertChar(this)' onmouseover='over(this)' onmouseout='out(this)'>") ;
  			document.write("<img src='" + sBasePath + aImages[i] + "' border='0'>") ;
  		}
  		else
  			document.write("<TD width='1%' class='DarkBackground'>&nbsp;") ;
  		document.write("</TD>") ;
  		i++ ;
  	}
  	document.write("</TR>") ;
  }
  //-->
  			</script>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_specialchar.html
  
  Index: fck_specialchar.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_specialchar.html
   * 	Special Chars Selector dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:51
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<style type="text/css">
  				.HandIE { cursor: hand ; }
  				.HandMozilla { cursor: pointer ; }
  				.Sample { font-size: 24px; }
  		</style>
  		<script type="text/javascript">
  
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  var oSample ;
  
  function insertChar(charValue)
  {
  	dialogArguments.FCK.InsertHtml( charValue || "" ) ;
  	window.parent.Cancel() ;
  }
  
  function over(td)
  {
  	oSample.innerHTML = td.innerHTML ;
  	td.className = 'LightBackground HandIE HandMozilla' ;
  }
  
  function out(td)
  {
  	oSample.innerHTML = "&nbsp;" ;
  	td.className = 'DarkBackground HandIE HandMozilla' ;
  }
  
  function setDefaults()
  {
  	// Gets the sample placeholder.
  	oSample = document.getElementById("SampleTD") ;
  
  	// First of all, translates the dialog box texts.
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  }
  
  		</script>
  	</HEAD>
  	<BODY onload="setDefaults()" scroll="no">
  		<table cellpadding="0" cellspacing="0" width="100%" height="100%">
  			<tr>
  				<td width="100%">
  					<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
  						<script type="text/javascript">
  var aChars = ["!","&quot;","#","$","%","&","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&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;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;"] ;
  
  var cols = 20 ;
  
  var i = 0 ;
  while (i < aChars.length)
  {
  	document.write("<TR>") ;
  	for(var j = 0 ; j < cols ; j++) 
  	{
  		if (aChars[i])
  		{
  			document.write('<TD width="1%" class="DarkBackground HandIE HandMozilla" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
  			document.write(aChars[i]) ;
  		}
  		else
  			document.write("<TD class='DarkBackground'>&nbsp;") ;
  		document.write("</TD>") ;
  		i++ ;
  	}
  	document.write("</TR>") ;
  }
  						</script>
  					</table>
  				</td>
  				<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
  				<td valign="top">
  					<table width="40" cellpadding="0" cellspacing="0" border="0">
  						<tr>
  							<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground Sample">&nbsp;</td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  		</table>
  	</BODY>
  </HTML>
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_table.html
  
  Index: fck_table.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_table.html
   * 	Table dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-03 09:52:12
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<script type="text/javascript">
  <!--
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  // Gets the document DOM
  var oDOM = dialogArguments.FCK.EditorDocument ;
  
  // Gets the table if there is one selected.
  var table ;
  var e = dialogArguments.FCKSelection.GetSelectedElement() ;
  
  if ( ! e && document.location.search.substr(1) == 'Parent' )
  	e = dialogArguments.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
  
  if ( e && e.tagName == "TABLE" )
  	table = e ;
  
  // Fired when the window loading process is finished. It sets the fields with the
  // actual values if a table is selected in the editor.
  function OnLoad()
  {
  	// First of all, translate the dialog box texts
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  
  	if (table)
  	{
  		document.getElementById('txtRows').value    = table.rows.length ;
  		document.getElementById('txtColumns').value = table.rows[0].cells.length ;
  
  		// Gets the value from the Width or the Style attribute
  		var iWidth  = (table.style.width  ? table.style.width  : table.width ) ;
  		var iHeight = (table.style.height ? table.style.height : table.height ) ;
  
  		if (iWidth.indexOf('%') >= 0)			// Percentual = %
  		{
  			iWidth = parseInt( iWidth.substr(0,iWidth.length - 1) ) ;
  			document.getElementById('selWidthType').value = "percent" ;
  		}
  		else if (iWidth.indexOf('px') >= 0)		// Style Pixel = px
  		{																										  //
  			iWidth = iWidth.substr(0,iWidth.length - 2);
  			document.getElementById('selWidthType').value = "pixels" ;
  		}
  		
  		if (iHeight && iHeight.indexOf('px') >= 0)		// Style Pixel = px
  			iHeight = iHeight.substr(0,iHeight.length - 2);
  		
  		document.getElementById('txtWidth').value		= iWidth ;
  		document.getElementById('txtHeight').value		= iHeight ;
  		document.getElementById('txtBorder').value		= table.border ;
  		document.getElementById('selAlignment').value	= table.align ;
  		document.getElementById('txtCellPadding').value	= table.cellPadding	;
  		document.getElementById('txtCellSpacing').value	= table.cellSpacing	;
  //		document.getElementById('cmbFontStyle').value	= table.className ;
  
  		if (table.caption) document.getElementById('txtCaption').value = table.caption.innerText ;		
  		
  		document.getElementById('txtRows').disabled    = true ;
  		document.getElementById('txtColumns').disabled = true ;
  	}
  	
  	window.parent.SetOkButton( true ) ;	
  }
  
  // Fired when the user press the OK button
  function Ok()
  {
  	var bExists = ( table != null ) ;
  	
  	if ( ! bExists )
  	{
  		table = document.createElement( "TABLE" ) ;
  	}
  
  	// Removes the Width and Height styles
  	if ( bExists && table.style.width )		table.style.removeAttribute("width") ;
  	if ( bExists && table.style.height )	table.style.removeAttribute("height") ;
  	
  	table.width			= document.getElementById('txtWidth').value + ( document.getElementById('selWidthType').value == "percent" ? "%" : "") ;
  	table.height		= document.getElementById('txtHeight').value ;
  	table.border		= document.getElementById('txtBorder').value ;
  	table.align			= document.getElementById('selAlignment').value ;
  	table.cellPadding	= document.getElementById('txtCellPadding').value ;
  	table.cellSpacing	= document.getElementById('txtCellSpacing').value ;
  //	table.className		= cmbFontStyle.value ;
  	
  	if ( document.getElementById('txtCaption').value != '')
  	{
  		if (! table.caption) table.createCaption() ;
  		table.caption.innerText = document.getElementById('txtCaption').value ;
  	}
  //	else if ( bExists && table.caption )
  //		table.deleteCaption() ;		// TODO: It causes an IE internal error.
  		
  	if (! bExists)
  	{
  		var iRows = document.getElementById('txtRows').value ;
  		var iCols = document.getElementById('txtColumns').value ;
  		
  		for ( var r = 0 ; r < iRows ; r++ )
  		{
  			var oRow = table.insertRow(-1) ;
  			for ( var c = 0 ; c < iCols ; c++ )
  			{
  				var oCell = oRow.insertCell(-1) ;
  				oCell.innerHTML = "&nbsp;" ;
  			}
  		}
  		
  		dialogArguments.FCK.InsertElement( table ) ;
  	}
  	
  	return true ;
  }
  
  function IsDigit( e )
  {
  	e = e || event ;
  	var iCode = ( e.keyCode || e.charCode ) ;
  	return 
  		(
  			( iCode >= 48 && iCode <= 57 )		// Numbers
  			|| (iCode >= 37 && iCode <= 40)		// Arrows
  			|| iCode == 8		// Backspace
  			|| iCode == 46		// Delete
  		) ;
  }
  //-->
  		</script>
  	</head>
  	<body bottommargin="5" leftmargin="5" topmargin="5" rightmargin="5" onload="OnLoad()">
  		<table id="otable" cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%">
  			<tr>
  				<td>
  					<table cellSpacing="1" cellPadding="1" width="100%" border="0">
  						<tr>
  							<td valign="top">
  								<table cellSpacing="0" cellPadding="0" border="0">
  									<tr>
  										<td><span fckLang="DlgTableRows">Rows</span>:</td>
  										<td>&nbsp;<input id="txtRows" type="text" maxLength="3" size="2" value="3" name="txtRows" onkeypress="return IsDigit(event);"></td>
  									</tr>
  									<tr>
  										<td><span fckLang="DlgTableColumns">Columns</span>:</td>
  										<td>&nbsp;<input id="txtColumns" type="text" maxLength="2" size="2" value="2" name="txtColumns" onkeypress="return IsDigit(event);"></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td><span fckLang="DlgTableBorder">Border size</span>:</td>
  										<td>&nbsp;<INPUT id="txtBorder" type="text" maxLength="2" size="2" value="1" name="txtBorder" onkeypress="return IsDigit(event);"></td>
  									</tr>
  									<tr>
  										<td><span fckLang="DlgTableAlign">Alignment</span>:</td>
  										<td>&nbsp;<select id="selAlignment" name="selAlignment">
  												<option fckLang="DlgTableAlignNotSet" value="" selected>&lt;Not set&gt;</option>
  												<option fckLang="DlgTableAlignLeft" value="left">Left</option>
  												<option fckLang="DlgTableAlignCenter" value="center">Center</option>
  												<option fckLang="DlgTableAlignRight" value="right">Right</option>
  											</select></td>
  									</tr>
  								</table>
  							</td>
  							<td>&nbsp;&nbsp;&nbsp;</td>
  							<td align="right" valign="top">
  								<table cellSpacing="0" cellPadding="0" border="0">
  									<tr>
  										<td><span fckLang="DlgTableWidth">Width</span>:</td>
  										<td>&nbsp;<input id="txtWidth" type="text" maxLength="4" size="3" value="200" name="txtWidth" onkeypress="return IsDigit(event);"></td>
  										<td>&nbsp;<select id="selWidthType" name="selWidthType">
  												<option fckLang="DlgTableWidthPx" value="pixels" selected>pixels</option>
  												<option fckLang="DlgTableWidthPc" value="percent">percent</option>
  											</select></td>
  									</tr>
  									<tr>
  										<td><span fckLang="DlgTableHeight">Height</span>:</td>
  										<td>&nbsp;<INPUT id="txtHeight" type="text" maxLength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);"></td>
  										<td>&nbsp;<span fckLang="DlgTableWidthPx">pixels</span></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgTableCellSpace">Cell spacing</span>:</td>
  										<td>&nbsp;<input id="txtCellSpacing" type="text" maxLength="2" size="2" value="1" name="txtCellSpacing"
  												onkeypress="return IsDigit(event);"></td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgTableCellPad">Cell padding</span>:</td>
  										<td>&nbsp;<input id="txtCellPadding" type="text" maxLength="2" size="2" value="1" name="txtCellPadding"
  												onkeypress="return IsDigit(event);"></td>
  										<td>&nbsp;</td>
  									</tr>
  								</table>
  							</td>
  						</tr>
  					</table>
  					<table cellSpacing="0" cellPadding="0" width="100%" border="0" ID="Table1">
  						<tr>
  						<td nowrap><span fcklang="DlgClassName">Class Name</span>:</td>
  							<td>&nbsp;</td>
  										<td>
  										<script type="text/javascript">
  //											var tbstyles = new TBCombo( "FontStyle"		, "null"			, "", dialogArguments.config.StyleNames, dialogArguments.config.StyleValues, 'CheckStyle("cmbFontStyle")');
  //											document.write(tbstyles.GetHTML());
  										</script></td>
  						</tr>
  						<tr>
  							<td><span fckLang="DlgTableCaption">Caption</span>:</td>
  							<td>&nbsp;</td>
  							<td width="100%">&nbsp;
  								<input id="txtCaption" type="text" style="WIDTH: 100%"></td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/fck_tablecell.html
  
  Index: fck_tablecell.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_tablecell.html
   * 	Cell properties dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-05 01:39:41
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<script type="text/javascript" src="../js/dhtmled.js"></script>
  		<script type="text/javascript" src="../js/fck_events.js"></script>
  		<script type="text/javascript" src="../js/fck_toolbar.js"></script>
  		<script type="text/javascript">
  <!--
  var dialogArguments = window.parent.InnerDialogLoaded() ;
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  // Gets the document DOM
  var oDOM = dialogArguments.FCK.EditorDocument ;
  
  function OnLoad()
  {
  	// First of all, translate the dialog box texts
  	dialogArguments.FCKLanguageManager.TranslatePage(document) ;
  
  	window.parent.SetOkButton( true ) ;	
  }
  
  function IsDigit( e )
  {
  	e = e || event ;
  	var iCode = ( e.keyCode || e.charCode ) ;
  	return 
  		(
  			( iCode >= 48 && iCode <= 57 )		// Numbers
  			|| (iCode >= 37 && iCode <= 40)		// Arrows
  			|| iCode == 8		// Backspace
  			|| iCode == 46		// Delete
  		) ;
  }
  
  
  
  //////// TODO
  
  // Array of selected Cells
  var aTD = new Array() ;
  	
  function setDefaults()
  {
  	// Gets the document DOM
  	var oDOM = dialogArguments.objContent.DOM ;
  	var oRange = oDOM.selection.createRange() ;
  
  	var oParent = oRange.parentElement() ;
  
  	while (oParent && oParent.tagName != "td" && oParent.tagName != "TABLE")
  		oParent = oParent.parentNode ;
  
  	if ( oParent.tagName == "td" )
  		aTD[0] = oParent ;
  	else if ( oParent.tagName == "TABLE" )
  	{
  		// Loops throw all cells cheking if the selection, or part of it, is inside the cell
  		// and then add it to the selectec cells collection
  		for (i = 0 ; i < oParent.cells.length ; i++)
  		{
  			var oCellRange = oDOM.selection.createRange() ;
  			oCellRange.moveToElementText(oParent.cells[i]) ;
  			if ( oRange.inRange( oCellRange ) 
  				|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
  				|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
  			{
  				aTD[aTD.length] = oParent.cells[i] ;
  			}
  		}
  	}
  	
  	if (aTD[0])
  	{
  		var iWidth = aTD[0].width ;
  		
  		if (iWidth.indexOf('%') >= 0)
  		{
  			iWidth = iWidth.substr(0,iWidth.length - 1) ;
  			selWidthType.value = "percent" ;
  		}
  	
  		txtWidth.value			= iWidth ;
  		txtHeight.value			= aTD[0].height ;
  		selWordWrap.value		= ! aTD[0].noWrap ;
  		selHAlign.value			= aTD[0].align ;
  		selVAlign.value			= aTD[0].vAlign ;
  		txtRowSpan.value		= aTD[0].rowSpan ;
  		txtCollSpan.value		= aTD[0].colSpan ;
  		txtBackColor.value		= aTD[0].bgColor ; 
  		txtBorderColor.value	= aTD[0].borderColor ;
  		cmbFontStyle.value		= aTD[0].className ;
  	}
  }
  
  function ok()
  {
  	for( i = 0 ; i < aTD.length ; i++ )
  	{
  		if (txtWidth.value			!= "") aTD[i].width			= txtWidth.value + (selWidthType.value == "percent" ? "%" : "") ;		else aTD[i].removeAttribute("width") ;
  		if (txtHeight.value			!= "") aTD[i].height		= txtHeight.value		;		else aTD[i].removeAttribute("height") ;
  		if (selWordWrap.value		!= "") aTD[i].noWrap		= selWordWrap.value == "false" ; else aTD[i].removeAttribute("noWrap") ;
  		if (selHAlign.value			!= "") aTD[i].align			= selHAlign.value		; else aTD[i].removeAttribute("align") ;
  		if (selVAlign.value			!= "") aTD[i].vAlign		= selVAlign.value		; else aTD[i].removeAttribute("vAlign") ;
  		if (txtRowSpan.value		!= "") aTD[i].rowSpan		= txtRowSpan.value		; else aTD[i].removeAttribute("rowSpan") ;
  		if (txtCollSpan.value		!= "") aTD[i].colSpan		= txtCollSpan.value		; else aTD[i].removeAttribute("colSpan") ;
  		if (txtBackColor.value		!= "") aTD[i].bgColor		= txtBackColor.value	; else aTD[i].removeAttribute("bgColor") ;
  		if (txtBorderColor.value	!= "") aTD[i].borderColor	= txtBorderColor.value	; else aTD[i].removeAttribute("borderColor") ;
  		if (cmbFontStyle.value		!= "") aTD[i].className		= cmbFontStyle.value	; else aTD[i].removeAttribute("className") ;
  	}
  	
  	cancel() ;
  }
  
  function SelectBackColor()
  {
  	var sColor = SelectColor() ;
  	if (sColor) txtBackColor.value = sColor ;
  }
  
  function SelectBorderColor()
  {
  	var sColor = SelectColor() ;
  	if (sColor) txtBorderColor.value = sColor ;
  }
  
  function SelectColor()
  {
  	return showModalDialog("fck_selcolor.html", dialogArguments, "dialogWidth:370px;dialogHeight:240px;help:no;scroll:no;status:no") ;
  }
  
  //-->
  		</script>
  	</head>
  	<body bottommargin="5" leftmargin="5" topmargin="5" rightmargin="5" onload="OnLoad()">
  		<table cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%">
  			<tr>
  				<td>
  					<table cellSpacing="1" cellPadding="1" width="100%" border="0">
  						<tr>
  							<td>
  								<table cellSpacing="0" cellPadding="0" border="0">
  									<tr>
  										<td nowrap><span fckLang="DlgCellWidth">Width</span>:</td>
  										<td>&nbsp;<input onkeypress="event.returnValue=IsDigit();" id="txtWidth" type="text" maxLength="4"
  												size="3" name="txtWidth">&nbsp;<select id="selWidthType" name="selWidthType">
  												<option fckLang="DlgCellWidthPx" value="pixels" selected>pixels</option>
  												<option fckLang="DlgCellWidthPc" value="percent">percent</option>
  											</select></td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellHeight">Height</span>:</td>
  										<td>&nbsp;<INPUT id="txtHeight" type="text" maxLength="4" size="3" name="txtHeight" onkeypress="event.returnValue=IsDigit();">&nbsp;<span fckLang="DlgCellWidthPx">pixels</span></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellWordWrap">Word Wrap</span>:</td>
  										<td>&nbsp;<select id="selWordWrap" name="selAlignment">
  												<option fckLang="DlgCellWordWrapNotSet" value="" selected>&lt;Not set&gt;</option>
  												<option fckLang="DlgCellWordWrapYes" value="true">Yes</option>
  												<option fckLang="DlgCellWordWrapNo" value="false">No</option>
  											</select></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
  										<td>&nbsp;<select id="selHAlign" name="selAlignment">
  												<option fckLang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
  												<option fckLang="DlgCellHorAlignLeft" value="left">Left</option>
  												<option fckLang="DlgCellHorAlignCenter" value="center">Center</option>
  												<option fckLang="DlgCellHorAlignRight" value="right">Right</option>
  											</select></td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellVerAlign">Vertival Alignement</span>:</td>
  										<td>&nbsp;<select id="selVAlign" name="selAlignment">
  												<option fckLang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
  												<option fckLang="DlgCellVerAlignTop" value="top">Top</option>
  												<option fckLang="DlgCellVerAlignMiddle" value="middle">Middle</option>
  												<option fckLang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
  												<option fckLang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
  											</select></td>
  									</tr>
  								</table>
  							</td>
  							<td>&nbsp;&nbsp;&nbsp;</td>
  							<td align="right">
  								<table cellSpacing="0" cellPadding="0" border="0">
  									<tr>
  										<td nowrap><span fckLang="DlgCellRowSpan">Rows Span</span>:</td>
  										<td>&nbsp; <input onkeypress="event.returnValue=IsDigit();" id="txtRowSpan" type="text" maxLength="3"
  												size="2" name="txtRows"></td>
  										<td></td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellCollSpan">Columns Span</span>:</td>
  										<td>&nbsp; <input onkeypress="event.returnValue=IsDigit();" id="txtCollSpan" type="text" maxLength="2"
  												size="2" name="txtColumns"></td>
  										<td></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellBackColor">Background Color</span>:</td>
  										<td>&nbsp;<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td>
  										<td>&nbsp; <input type="button" fckLang="DlgCellBtnSelect" value="Select..." onclick="SelectBackColor()"></td>
  									</tr>
  									<tr>
  										<td nowrap><span fckLang="DlgCellBorderColor">Border Color</span>:</td>
  										<td>&nbsp;<input id="txtBorderColor" type="text" size="8" name="txtCellPadding"></td>
  										<td>&nbsp; <input type="button" fckLang="DlgCellBtnSelect" value="Select..." onclick="SelectBorderColor()"></td>
  									</tr>
  									<tr>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  										<td>&nbsp;</td>
  									</tr>
  									<tr>
  										<td><span fckLang="DlgStyle">Style</span>:</td>
  										<td>
  										<script type="text/javascript">
  											var tbstyles = new TBCombo( "FontStyle"		, "null"			, "", dialogArguments.config.StyleNames, dialogArguments.config.StyleValues, 'CheckStyle("cmbFontStyle")');
  											document.write(tbstyles.GetHTML());
  										</script></td>
  										<td>&nbsp;</td>
  									</tr>
  								</table>
  							</td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  			<tr>
  				<td align="center"><BR>
  					<input type="button" fckLang="DlgBtnOK" value="OK" onclick="ok();" style="WIDTH: 100px">&nbsp; <input type="button" fckLang="DlgBtnCancel" value="Cancel" onclick="cancel();">
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor/dialog/images locked.gif
                        logo_fckeditor.gif logo_fredck.gif reset.gif
                        unlocked.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/dialog/images/locked.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/images/logo_fckeditor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/images/logo_fredck.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/images/reset.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/images/unlocked.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor/dialog/js fck_dialog_common.js
                        fck_image.js fck_link.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/dialog/js/fck_dialog_common.js
  
  Index: fck_dialog_common.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_dialog_common.js
   * 	Useful functions used by almost all dialog window pages.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-18 01:15:41
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // 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 ;
  		
  	var oValue = element.getAttribute( attName, 2 ) ;
  	
  	return ( oValue == null ? valueIfNull : oValue ) ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/js/fck_image.js
  
  Index: fck_image.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_image.js
   * 	Scripts related to the Link dialog window (see fck_link.html).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-09-10 01:59:57
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var oEditor = window.parent.InnerDialogLoaded() ;
  var FCK		= oEditor.FCK ;
  
  // Set the language direction.
  window.document.dir = oEditor.FCKLang.Dir ;
  
  // Set the Skin CSS.
  document.write( '<link href="' + oEditor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  //#### Dialog Tabs
  
  // Set the dialog tabs.
  window.parent.AddTab( 'Info', 'Image Info' ) ;
  // TODO : Enable File Upload (1/3).
  //window.parent.AddTab( 'Upload', 'Upload', true ) ;
  window.parent.AddTab( 'Advanced', 'Advanced' ) ;
  
  // Function called when a dialog tag is selected.
  function OnDialogTabChange( tabCode )
  {
  	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
  // TODO : Enable File Upload (2/3).
  //	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
  	ShowE('divAdvanced'	, ( tabCode == 'Advanced' ) ) ;
  }
  
  // Get the selected image (if available).
  var oImage = FCK.Selection.GetSelectedElement( 'IMG' ) ;
  
  var oImageOriginal ;
  
  function UpdateOriginal()
  {
  	oImageOriginal = new Image() ;
  	oImageOriginal.src = GetE('imgPreview').src ;
  }
  
  window.onload = function()
  {
  	// Translate the dialog box texts.
  	oEditor.FCKLanguageManager.TranslatePage(document) ;
  
  	// Load the selected element information (if any).
  	LoadSelection() ;
  	
  	// Show/Hide the "Browse Server" button.
  	GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? '' : 'none' ;
  	
  	UpdateOriginal() ;
  	
  	// Activate the "OK" button.
  	window.parent.SetOkButton( true ) ;
  }
  
  function LoadSelection()
  {
  	if ( ! oImage ) return ;
  	
  	GetE('txtURL').value    = GetAttribute( oImage, 'src', '' ) ;
  	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', '' ) ;
  
  	if ( oImage.style.pixelWidth > 0 )
  		GetE('txtWidth').value  = oImage.style.pixelWidth ;
  	else
  		GetE('txtWidth').value  = GetAttribute( oImage, "width", '' ) ;
  		
  	if ( oImage.style.pixelHeight > 0 )
  		GetE('txtHeight').value  = oImage.style.pixelHeight ;
  	else
  		GetE('txtHeight').value = 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('txtAttClasses').value		= oImage.getAttribute('class',2) || '' ;
  	GetE('txtLongDesc').value		= oImage.longDesc ;
  	
  	if ( oEditor.FCKBrowserInfo.IsIE ) 
  		GetE('txtAttStyle').value	= oImage.style.cssText ;
  	else
  		GetE('txtAttStyle').value	= oImage.getAttribute('style',2) ;
  		
  	UpdatePreview() ;
  }
  
  //#### The OK button was hit.
  function Ok()
  {
  	if ( GetE('txtURL').value.length == 0 )
  	{
  		window.parent.SetSelectedTab( 'Info' ) ;
  		GetE('txtURL').focus() ;
  		
  		alert( 'Please type the image URL' ) ;
  		
  		return false ;
  	}
  
  	var e = ( oImage || FCK.EditorDocument.createElement( 'IMG' ) ) ;
  	
  	UpdateImage( e ) ;
  
  	if ( ! oImage )
  		FCK.InsertElement( e ) ;
  
  	return true ;
  }
  
  function UpdateImage( e, skipId )
  {
  	e.src = 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, 'class'	, GetE('txtAttClasses').value ) ;
  	SetAttribute( e, 'longDesc'	, GetE('txtLongDesc').value ) ;
  
  	if ( oEditor.FCKBrowserInfo.IsIE ) 
  		e.style.cssText = GetE('txtAttStyle').value ;
  	else
  		SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
  }
  
  function UpdatePreview()
  {
  	if ( GetE('txtURL').value.length == 0 )
  		GetE('imgPreview').style.display = 'none' ;
  	else
  		UpdateImage( GetE('imgPreview'), true ) ;
  }
  
  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 mantained
  	if ( oImageOriginal && bLockRatio )
  	{
  		if ( value.length == 0 || isNaN( value ) )
  		{
  			GetE('txtHeight').value = GetE('txtWidth').value = '' ;
  			return ;
  		}
  	
  		if ( dimension == 'Width' )
  			GetE('txtHeight').value = Math.round( oImageOriginal.height * ( value  / oImageOriginal.width ) ) ;
  		else
  			GetE('txtWidth').value  = Math.round( oImageOriginal.width  * ( value / oImageOriginal.height ) ) ;
  	}
  	
  	UpdatePreview() ;
  }
  
  // Fired when the Reset Size button is clicked
  function ResetSizes()
  {
  	if ( ! oImageOriginal ) return ;
  
  	GetE('txtWidth').value  = oImageOriginal.width ;
  	GetE('txtHeight').value = oImageOriginal.height ;
  	
  	UpdatePreview() ;
  }
  
  function BrowseServer()
  {
  	// Set the browser window feature.
  	var iWidth	= oEditor.FCKConfig.ImageBrowserWindowWidth ;
  	var iHeight	= oEditor.FCKConfig.ImageBrowserWindowHeight ;
  	
  	var iLeft = (screen.width  - iWidth) / 2 ;
  	var iTop  = (screen.height - iHeight) / 2 ;
  
  	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
  	sOptions += ",width=" + iWidth ; 
  	sOptions += ",height=" + iHeight ;
  	sOptions += ",left=" + iLeft ;
  	sOptions += ",top=" + iTop ;
  
  	// Open the browser window.
  	var oWindow = window.open( oEditor.FCKConfig.ImageBrowserURL, "FCKBrowseWindow", sOptions ) ;
  }
  
  function SetUrl( url )
  {
  	document.getElementById('txtUrl').value = url ;
  	GetE('txtHeight').value = GetE('txtWidth').value = '' ;
  	UpdatePreview() ;
  	UpdateOriginal() ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/dialog/js/fck_link.js
  
  Index: fck_link.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_link.js
   * 	Scripts related to the Link dialog window (see fck_link.html).
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-02 00:26:07
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var oEditor = window.parent.InnerDialogLoaded() ;
  var FCK		= oEditor.FCK ;
  
  // Set the language direction.
  window.document.dir = oEditor.FCKLang.Dir ;
  
  // Set the Skin CSS.
  document.write( '<link href="' + oEditor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  //#### Dialog Tabs
  
  // Set the dialog tabs.
  window.parent.AddTab( 'Info', 'Link Info' ) ;
  window.parent.AddTab( 'Target', 'Target', true ) ;
  // TODO : Enable File Upload (1/3).
  //window.parent.AddTab( 'Upload', 'Upload', true ) ;
  window.parent.AddTab( 'Advanced', 'Advanced' ) ;
  
  // Function called when a dialog tag is selected.
  function OnDialogTabChange( tabCode )
  {
  	ShowE('divInfo'		, ( tabCode == 'Info' ) ) ;
  	ShowE('divTarget'	, ( tabCode == 'Target' ) ) ;
  // TODO : Enable File Upload (2/3).
  //	ShowE('divUpload'	, ( tabCode == 'Upload' ) ) ;
  	ShowE('divAttribs'	, ( tabCode == 'Advanced' ) ) ;
  }
  
  //#### Regular Expressions library.
  var oRegex = new Object() ;
  
  oRegex.UriProtocol = new RegExp('') ; 
  oRegex.UriProtocol.compile( '^(((http|https|ftp|news):\/\/)|mailto:)', 'gi' ) ;
  
  oRegex.UrlOnChangeProtocol = new RegExp('') ; 
  oRegex.UrlOnChangeProtocol.compile( '^(http|https|ftp|news)://(?=.)', 'gi' ) ;
  
  oRegex.UrlOnChangeTestOther = new RegExp('') ; 
  oRegex.UrlOnChangeTestOther.compile( '^(javascript:|#|/)', 'gi' ) ;
  
  oRegex.ReserveTarget = new RegExp('') ;
  oRegex.ReserveTarget.compile( '^_(blank|self|top|parent)$', 'i' ) ;
  
  oRegex.PopupUri = new RegExp('') ; 
  oRegex.PopupUri.compile( "^javascript:void\\(\\s*window.open\\(\\s*'([^']+)'\\s*,\\s*(?:'([^']*)'|null)\\s*,\\s*'([^']*)'\\s*\\)\\s*\\)\\s*$" ) ;
  
  oRegex.PopupFeatures = new RegExp('') ;
  oRegex.PopupFeatures.compile( '(?:^|,)([^=]+)=(\\d+|yes|no)', 'gi' ) ;
  
  //#### Parser Functions
  
  var oParser = new Object() ;
  
  oParser.ParseEMailUrl = function( emailUrl )
  {
  	// Initializes the EMailInfo object.
  	var oEMailInfo = new Object() ;
  	oEMailInfo.Address	= '' ;
  	oEMailInfo.Subject	= '' ;
  	oEMailInfo.Body		= '' ;
  
  	var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ;
  	if ( oParts )
  	{
  		// Set the e-mail address.
  		oEMailInfo.Address = oParts[1] ;
  
  		// Look for the optional e-mail parameters.
  		if ( oParts[2] )
  		{
  			var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ;
  			if ( oMatch ) oEMailInfo.Subject = unescape( oMatch[2] ) ;
  
  			oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ;
  			if ( oMatch ) oEMailInfo.Body = unescape( oMatch[2] ) ;
  		}
  	}
  
  	return oEMailInfo ;
  }
  
  oParser.CreateEMailUri = function( address, subject, body )
  {
  	var sBaseUri = 'mailto:' + address ;
  
  	var sParams = '' ;
  
  	if ( subject.length > 0 )
  		sParams = '?subject=' + escape( subject ) ;
  
  	if ( body.length > 0 )
  	{
  		sParams += ( sParams.length == 0 ? '?' : '&' ) ;
  		sParams += 'body=' + escape( body ) ;
  	}
  
  	return sBaseUri + sParams ;
  }
  
  //#### Initialization Code
  
  // oLink: The actual selected link in the editor.
  var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
  if ( oLink )
  	FCK.Selection.MoveToNode( 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.
  	SetLinkType( GetE('cmbLinkType').value ) ;
  	
  	// Show/Hide the "Browse Server" button.
  	GetE('divBrowseServer').style.display = oEditor.FCKConfig.LinkBrowser ? '' : 'none' ;
  	
  	// Show the initial dialog content.
  	GetE('divInfo').style.display = '' ;
  
  	// Activate the "OK" button.
  	window.parent.SetOkButton( true ) ;
  }
  
  var bHasAnchors ;
  
  function LoadAnchorNamesAndIds()
  {
  	var aAnchors	= oEditor.FCK.EditorDocument.anchors ;
  	var aIds		= oEditor.FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
  
  	bHasAnchors = ( aAnchors.lenght > 0 || aIds.length > 0 ) ;
  	
  	for ( var i = 0 ; i < aAnchors.length ; i++ )
  	{
  		var sName = aAnchors[i].name ;
  		if ( sName && sName.length > 0 )
  			oEditor.FCKTools.AddSelectOption( document, GetE('cmbAnchorName'), sName, sName ) ;
  	}
  
  	for ( var i = 0 ; i < aIds.length ; i++ )
  	{
  		oEditor.FCKTools.AddSelectOption( document, 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('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' ) ;
  	}
  
  	// Search for the protocol.
  	var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
  
  	if ( sProtocol )
  	{
  		sProtocol = sProtocol[0].toLowerCase() ;
  		GetE('cmbLinkProtocol').value = sProtocol ;
  	
  		// Remove the protocol and get the remainig URL.
  		var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
  
  		if ( sProtocol == 'mailto:' )	// It is an e-mail link.
  		{
  			sType = 'email' ;
  
  			var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ;
  			GetE('txtEMailAddress').value	= oEMailInfo.Address ;
  			GetE('txtEMailSubject').value	= oEMailInfo.Subject ;
  			GetE('txtEMailBody').value		= oEMailInfo.Body ;
  		}
  		else				// It is a normal link.
  		{
  			sType = 'url' ;
  			GetE('txtUrl').value = sUrl ;
  		}
  	}
  	else if ( sHRef.substr(0,1) == '#' && sHRef.length > 2 )	// 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('txtAttClasses').value		= oLink.getAttribute('class',2) || '' ;
  	GetE('txtAttContentType').value	= oLink.type ;
  	GetE('txtAttCharSet').value		= oLink.charset ;
  	
  	if ( oEditor.FCKBrowserInfo.IsIE ) 
  		GetE('txtAttStyle').value	= oLink.style.cssText ;
  	else
  		GetE('txtAttStyle').value	= oLink.getAttribute('style',2) ;
  	
  	// Update the Link type combo.
  	GetE('cmbLinkType').value = sType ;
  }
  
  //#### Link type selection.
  function SetLinkType( linkType )
  {
  	ShowE('divLinkTypeUrl'		, (linkType == 'url') ) ;
  	ShowE('divLinkTypeAnchor'	, (linkType == 'anchor') ) ;
  	ShowE('divLinkTypeEMail'	, (linkType == 'email') ) ;
  
  	window.parent.SetTabVisibility( 'Target'	, (linkType == 'url') ) ;
  // TODO : Enable File Upload (3/3).
  //	window.parent.SetTabVisibility( 'Upload'	, (linkType == 'url') ) ;
  	window.parent.SetTabVisibility( 'Advanced'	, (linkType != 'anchor' || bHasAnchors) ) ;
  }
  
  //#### 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 ;
  	}
  }
  
  //#### 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' ;
  }
  
  //#### Builds the javascript URI to open a popup to the specified URI.
  function BuildPopupUri( uri )
  {
  	var oReg = new RegExp( "'", "g" ) ;
  	var sWindowName = "'" + GetE('txtPopupName').value.replace(oReg, "\\'") + "'" ;
  	
  	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 ;
  	
  	return ( "javascript:void(window.open('" + uri + "'," + sWindowName + ",'" + sFeatures + "'))" ) ;
  }
  
  //#### 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 ;
  
  	switch ( GetE('cmbLinkType').value )
  	{
  		case 'url' :
  			sUri = GetE('cmbLinkProtocol').value + GetE('txtUrl').value ;
  			
  			if( GetE('cmbTarget').value == 'popup' )
  				sUri = BuildPopupUri( sUri ) ;
  				
  			break ;
  
  		case 'email' :
  			sUri = oParser.CreateEMailUri(
  				GetE('txtEMailAddress').value,
  				GetE('txtEMailSubject').value,
  				GetE('txtEMailBody').value ) ;
  			break ;
  
  		case 'anchor' :
  			var sAnchor = GetE('cmbAnchorName').value ;
  			if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
  			sUri = '#' + sAnchor ;
  			break ;
  	}
  
  	if ( oLink )	// Modifying an existent link.
  		oLink.href = sUri ;
  	else			// Creating a new link.
  		oLink = oEditor.FCK.CreateLink( sUri ) ;
  
  	// Target
  	if( GetE('cmbTarget').value != 'popup' )
  		SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
  	else
  		SetAttribute( oLink, 'target', null ) ;
  
  	// Advances Attributes
  	SetAttribute( oLink, 'id'		, GetE('txtAttId').value ) ;
  	SetAttribute( oLink, 'name'		, GetE('txtAttName').value ) ;		// No IE. Set but doensn't update the outerHTML.
  	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, 'class'	, GetE('txtAttClasses').value ) ;
  	SetAttribute( oLink, 'type'		, GetE('txtAttContentType').value ) ;
  	SetAttribute( oLink, 'charset'	, GetE('txtAttCharSet').value ) ;
  	
  	if ( oEditor.FCKBrowserInfo.IsIE ) 
  		oLink.style.cssText = GetE('txtAttStyle').value ;
  	else
  		SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
  
  	return true ;
  }
  
  function BrowseServer()
  {
  	// Set the browser window feature.
  	var iWidth	= oEditor.FCKConfig.LinkBrowserWindowWidth ;
  	var iHeight	= oEditor.FCKConfig.LinkBrowserWindowHeight ;
  	
  	var iLeft = (screen.width  - iWidth) / 2 ;
  	var iTop  = (screen.height - iHeight) / 2 ;
  
  	var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes" ;
  	sOptions += ",width=" + iWidth ; 
  	sOptions += ",height=" + iHeight ;
  	sOptions += ",left=" + iLeft ;
  	sOptions += ",top=" + iTop ;
  
  	// Open the browser window.
  	var oWindow = window.open( oEditor.FCKConfig.LinkBrowserURL, "FCKBrowseWindow", sOptions ) ;
  }
  
  function SetUrl( url )
  {
  	document.getElementById('txtUrl').value = url ;
  	OnUrlChange() ;
  }
  
  


comfuture    04/11/24 21:25:23

  Added:       util/fckeditor/editor fckdebug.html fckdialog.html
                        fckeditor.html fckeditor.original.html
                        fckeditorarea.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/fckdebug.html
  
  Index: fckdebug.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdebug.html
   * 	This is the Debug window.
   * 	It automatically popups if the Debug = true in the configuration file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
  		<title>FCKeditor Debug Window</title>
  		<script type="text/javascript">
  
  var oWindow ;
  var oDiv ;
  
  if ( !window.FCKMessages )
  	window.FCKMessages = new Array() ;
  
  function Initialize()
  {
  	oWindow = window.frames[ 'eOutput' ]
  	oWindow.document.open() ;
  	oWindow.document.write( '<div id="divMsg"></div>' ) ;
  	oWindow.document.close() ;
  	oDiv	= oWindow.document.getElementById('divMsg') ;
  }
  
  function Output( message, color )
  {
  	if ( color )
  		message = '<font color="' + color + '">' + message + '</font>' ;
  		
  	window.FCKMessages[ window.FCKMessages.length ] = message ;
  	StartTimer() ;
  }
  
  function StartTimer()
  {
  	window.setTimeout( 'CheckMessages()', 100 ) ;
  }
  
  function CheckMessages()
  {
  	if ( window.FCKMessages.length > 0 )
  	{
  		// Get the first item in the queue
  		var sMessage = window.FCKMessages[0] ;
  		
  		// Removes the first item from the queue
  		var oTempArray = new Array() ;
  		for ( i = 1 ; i < window.FCKMessages.length ; i++ )
  			oTempArray[ i - 1 ] = window.FCKMessages[ i ] ;
  		window.FCKMessages = oTempArray ;
  		
  		var d = new Date() ;
  		var sTime = 
  			( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' + 
  			( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' + 
  			( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' + 
  			( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ;
  
  		var oMsgDiv = oWindow.document.createElement( 'div' ) ;
  		oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '</b>' ;
  		oDiv.appendChild( oMsgDiv ) ;
  		oMsgDiv.scrollIntoView() ;
  	}
  }
  
  function Clear()
  {
  	oDiv.innerHTML = '' ;
  }
  		</script>
  	</head>
  	<body onload="Initialize();" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10">
  		<TABLE height="100%" cellSpacing="5" cellPadding="0" width="100%" border="0">
  			<TR>
  				<TD>
  					<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
  						<TR>
  							<TD><FONT size="+2"><STRONG>FCKeditor Debug Window</STRONG></FONT></TD>
  							<TD align="right"><INPUT type="button" value="Clear" onclick="Clear();"></TD>
  						</TR>
  					</TABLE>
  				</TD>
  			</TR>
  			<TR>
  				<TD height="100%" style="BORDER-RIGHT: #696969 1px solid; BORDER-TOP: #696969 1px solid; BORDER-LEFT: #696969 1px solid; BORDER-BOTTOM: #696969 1px solid">
  					<iframe id="eOutput" name="eOutput" width="100%" height="100%" scrolling="auto" src="about:blank" frameborder="no"></iframe>
  				</TD>
  			</TR>
  		</TABLE>
  	</body>
  </html>
  
  
  1.1                  siminweb/util/fckeditor/editor/fckdialog.html
  
  Index: fckdialog.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckdialog.html
   * 	This page is used by all dialog box as the container.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:57:24
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<meta name="robots" content="noindex, nofollow" />
  		<script type="text/javascript">
  <!--
  
  // Sets the Skin CSS
  document.write( '<link href="' + dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
  
  // Sets the language direction.
  window.document.dir = dialogArguments.Editor.FCKLang.Dir ;
  
  var sTitle = dialogArguments.Title ;
  document.write( '<title>' + sTitle + '</title>' ) ;
  
  function LoadInnerDialog()
  {
  	// First of all, translate the dialog box contents.
  	dialogArguments.Editor.FCKLanguageManager.TranslatePage( document ) ;
  
  	window.frames["frmMain"].document.location.href = dialogArguments.Page ;
  }
  
  function InnerDialogLoaded()
  {
  	SetOnKeyDown( window.frames["frmMain"].document ) ;
  	DisableContextMenu( window.frames["frmMain"].document ) ;
  	
  	return dialogArguments.Editor ;
  }
  
  function SetOkButton( showIt )
  {
  	document.getElementById('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
  }
  
  function SetScrollBar( showIt )
  {
  	document.getElementById('frmMain').scrolling = showIt ? 'yes' : 'no' ;
  }
  
  function Ok()
  {
  	if ( window.frames["frmMain"].Ok() )
  		Cancel() ;
  }
  
  function Cancel()
  {
  	window.close() ;
  }
  
  // Object that holds all available tabs.
  var oTabs = new Object() ;
  
  function AddTab( tabCode, tabText, startHidden )
  {
  	if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
  		return ;
  
  	var eTabsRow = document.getElementById( 'Tabs' ) ;
  
  	var oCell = eTabsRow.insertCell(  eTabsRow.cells.length - 1 ) ;
  	oCell.noWrap = true ;
  
  	var oDiv = document.createElement( 'DIV' ) ;
  	oDiv.className = 'PopupTab' ;
  	oDiv.innerHTML = tabText ;
  	oDiv.TabCode = tabCode ;
  	oDiv.onclick = function()
  	{
  		SetSelectedTab( this.TabCode ) ;
  	}
  	
  	if ( startHidden )
  		oDiv.style.display = 'none' ;
  	
  	var eTabsRow = document.getElementById( 'TabsRow' ) ;
  	
  	oCell.appendChild( oDiv ) ;
  	
  	if ( eTabsRow.style.display == 'none' )
  	{
  		var eTitleArea = document.getElementById( 'TitleArea' ) ;
  		eTitleArea.className = 'PopupTitle' ;
  		
  		oDiv.className = 'PopupTabSelected' ;
  		eTabsRow.style.display = '' ;
  		
  		if ( ! dialogArguments.Editor.FCKBrowserInfo.IsIE )
  			window.onresize() ;
  	}
  	
  	oTabs[ tabCode ] = oDiv ;
  	oTabs[ tabCode ].Index = oTabs.length - 1 ;
  }
  
  function SetSelectedTab( tabCode )
  {
  	for ( var sCode in oTabs )
  	{
  		if ( sCode == tabCode )
  			oTabs[sCode].className = 'PopupTabSelected' ;
  		else
  			oTabs[sCode].className = 'PopupTab' ;
  	}
  	
  	if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
  		window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
  }
  
  function SetTabVisibility( tabCode, isVisible )
  {
  	var oTab = oTabs[ tabCode ] ;
  	oTab.style.display = isVisible ? '' : 'none' ;
  	
  	if ( ! isVisible && oTab.className == 'PopupTabSelected' )
  	{
  		for ( var sCode in oTabs )
  		{
  			if ( oTabs[sCode].style.display != 'none' )
  			{
  				SetSelectedTab( sCode ) ;
  				break ;
  			}
  		}
  	}
  }
  
  function SetOnKeyDown( targetDocument )
  {
  	targetDocument.onkeydown = function ( e )
  	{
  		var e = e || event || this.parentWindow.event ;
  		switch ( e.keyCode )
  		{
  			case 13 :		// ENTER
  				var oTarget = e.srcElement || e.target ;
  				if ( oTarget.tagName == 'TEXTAREA' ) return ;
  				Ok() ;
  				return false ;
  			case 27 :		// ESC
  				Cancel() ;
  				return false ;
  				break ;
  		}
  	}
  }
  SetOnKeyDown( document ) ;
  
  function DisableContextMenu( targetDocument )
  {
  	if ( dialogArguments.Editor.FCKBrowserInfo.IsIE ) return ;
  	
  	// Disable Right-Click
  	var oOnContextMenu = function( e )
  	{
  		var sTagName = e.target.tagName ;
  		if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
  			e.preventDefault() ;
  	}
  	targetDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
  }
  DisableContextMenu( document ) ;
  
  if ( ! dialogArguments.Editor.FCKBrowserInfo.IsIE )
  {
  	window.onresize = function()
  	{
  		var oFrame = document.getElementById("frmMain") ;
  		oFrame.height = 0 ;
  
  		var oCell = document.getElementById("FrameCell") ;	
  		var iHeight = oCell.offsetHeight ;
  		
  		oFrame.height = iHeight - 2 ;
  	}
  }
  
  //-->
  		</script>
  	</head>
  	<body onload="LoadInnerDialog();" class="PopupBody">
  		<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
  			<tr>
  				<td id="TitleArea" class="PopupTitle PopupTitleBorder">
  					<script type="text/javascript">
  <!--
  document.write( sTitle ) ;
  //-->
  					</script>
  				</td>
  			</tr>
  			<tr id="TabsRow" style="DISPLAY: none">
  				<td class="PopupTabArea">
  					<table border="0" cellpadding="0" cellspacing="0" width="100%">
  						<tr id="Tabs" onselectstart="return false;">
  							<td class="PopupTabEmptyArea">&nbsp;</td>
  							<td class="PopupTabEmptyArea" width="100%">&nbsp;</td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  			<tr>
  				<td id="FrameCell" height="100%">
  					<iframe id="frmMain" name="frmMain" frameborder="0" height="100%" width="100%" scrolling="auto">
  					</iframe>
  				</td>
  			</tr>
  			<tr>
  				<td class="PopupButtons">
  					<table border="0" cellpadding="0" cellspacing="0">
  						<tr>
  							<td width="100%">&nbsp;</td>
  							<td nowrap="nowrap">
  								<input id="btnOk" style="VISIBILITY: hidden; WIDTH: 100px" type="button" value="Ok" class="Button"
  									onclick="Ok();" fckLang="DlgBtnOK" />&nbsp; <input type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
  							</td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  1.1                  siminweb/util/fckeditor/editor/fckeditor.html
  
  Index: fckeditor.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditor.html
   * 	Main page that holds the editor.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:37:01
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor</title>
  		<meta name="robots" content="noindex, nofollow" />
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<meta http-equiv="Cache-Control" content="public">
  		<script type="text/javascript" src="js/fck_startup.js"></script>
  	</head>
  	<body onfocus="FCK.Focus();" onclick="FCK.Focus();">
  		<table height="100%" width="100%" cellpadding="0" cellspacing="0" border="0">
  			<tr>
  				<td unselectable="on">
  					<table width="100%" cellpadding="0" cellspacing="0" border="0">
  						<tr id="Collapsed" style="DISPLAY: none">
  							<td class="TB_Expand" title="Expand Toolbar" unselectable="on" colspan="3" onclick="FCKToolbarSet.Expand();return false;"><img class="TB_ExpandImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
  						</tr>
  						<tr id="Expanded" style="DISPLAY: none">
  							<td id="CollapseHandle" style="DISPLAY: none" class="TB_Collapse" title="Collapse Toolbar"
  								unselectable="on" valign="bottom" onclick="FCKToolbarSet.Collapse();return false;"><img class="TB_CollapseImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
  							<td id="eToolbar" class="TB_ToolbarSet" unselectable="on"></td>
  							<td width="1" style="BACKGROUND-COLOR: #696969"></td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  			<tr id="eWysiwyg">
  				<td id="eWysiwygCell" height="100%">
  					<iframe id="eEditorArea" name="eEditorArea" height="100%" width="100%" src="fckeditorarea.html"
  						frameborder="no"></iframe>
  				</td>
  			</tr>
  			<tr id="eSource" style="DISPLAY: none">
  				<td class="Source" height="100%" valign="top">
  					<textarea id="eSourceField" style="WIDTH: 100%; HEIGHT: 100%"></textarea>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/fckeditor.original.html
  
  Index: fckeditor.original.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditor.original.html
   * 	Main page that holds the editor.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:37:01
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor</title>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <!-- @Packager.RemoveLine -->
  		<meta name="robots" content="noindex, nofollow" />
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<!-- @Packager.RemoveLine
  		<meta http-equiv="Cache-Control" content="public">
  		@Packager.RemoveLine -->
  		<!-- @Packager.Remove.Start -->
  		<script type="text/javascript" src="_source/internals/fckbrowserinfo.js"></script>
  		<script type="text/javascript" src="_source/internals/fckscriptloader.js"></script>
  		<script type="text/javascript" src="_source/internals/fckconfig.js"></script>
  		<script type="text/javascript" src="_source/internals/fck_onload.js"></script>
  		<script type="text/javascript" src="_source/internals/fckurlparams.js"></script>
  		<script type="text/javascript" src="_source/globals/fck_constants.js"></script>
  		<script type="text/javascript" src="_source/internals/fck.js"></script>
  		<script type="text/javascript" src="_source/globals/fckeditorapi.js"></script>
  		<!-- @Packager.Remove.End -->
  		<!-- @Packager.RemoveLine
  		<script type="text/javascript" src="js/fck_startup.js"></script>
  		@Packager.RemoveLine -->
  	</head>
  	<body onfocus="FCK.Focus();" onclick="FCK.Focus();">
  		<table height="100%" width="100%" cellpadding="0" cellspacing="0" border="0">
  			<tr>
  				<td unselectable="on">
  					<table width="100%" cellpadding="0" cellspacing="0" border="0">
  						<tr id="Collapsed" style="DISPLAY: none">
  							<td class="TB_Expand" title="Expand Toolbar" unselectable="on" colspan="3" onclick="FCKToolbarSet.Expand();return false;"><img class="TB_ExpandImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
  						</tr>
  						<tr id="Expanded" style="DISPLAY: none">
  							<td id="CollapseHandle" style="DISPLAY: none" class="TB_Collapse" title="Collapse Toolbar"
  								unselectable="on" valign="bottom" onclick="FCKToolbarSet.Collapse();return false;"><img class="TB_CollapseImg" src="images/spacer.gif" width="8" height="4" unselectable="on"></td>
  							<td id="eToolbar" class="TB_ToolbarSet" unselectable="on"></td>
  							<td width="1" style="BACKGROUND-COLOR: #696969"></td>
  						</tr>
  					</table>
  				</td>
  			</tr>
  			<tr id="eWysiwyg">
  				<td id="eWysiwygCell" height="100%">
  					<iframe id="eEditorArea" name="eEditorArea" height="100%" width="100%" src="fckeditorarea.html"
  						frameborder="no"></iframe>
  				</td>
  			</tr>
  			<tr id="eSource" style="DISPLAY: none">
  				<td class="Source" height="100%" valign="top">
  					<textarea id="eSourceField" style="WIDTH: 100%; HEIGHT: 100%"></textarea>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/fckeditorarea.html
  
  Index: fckeditorarea.html
  ===================================================================
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html>
  	<head>
  		<title>FCKeditor - Editor Area</title>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  		<link href="css/fck_editorarea.css" type="text/css" rel="stylesheet" />
  	</head>
  	<body></body>
  </html>
  
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default
                        Browser.css browser.html frmactualfolder.html
                        frmcreatefolder.html frmfolders.html
                        frmresourceslist.html frmresourcetype.html
                        frmupload.html
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/Browser.css
  
  Index: Browser.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: Browser.css
   * 	CSS styles used by all pages that compose the File Browser.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body
  {
  	background-color: #f1f1e3;
  }
  
  form
  {
  	margin: 0px 0px 0px 0px ;
  	padding: 0px 0px 0px 0px ;
  }
  
  .Frame
  {
  	background-color: #f1f1e3;
  	border-color: #f1f1e3;
  	border-right: thin inset;
  	border-top: thin inset;
  	border-left: thin inset;
  	border-bottom: thin inset;
  }
  
  body.FileArea
  {
  
  	background-color: #ffffff;
  }
  
  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
  {
  	border-right: #737357 1px solid;
  	border-top: #737357 1px solid;
  	border-left: #737357 1px solid;
  	color: #3b3b1f;
  	border-bottom: #737357 1px solid;
  	background-color: #c7c78f;
  }
  
  .FolderListCurrentFolder img
  {
  	background-image: url(images/FolderOpened.gif);
  }
  
  .FolderListFolder img
  {
  	background-image: url(images/Folder.gif);
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/browser.html
  
  Index: browser.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: browser.html
   * 	This page compose the File Browser dialog frameset.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<title>FCKeditor - Resources Browser</title>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  	</head>
  	<frameset cols="150,*" class="Frame" framespacing="3" bordercolor="#f1f1e3" frameborder="yes">
  		<frameset rows="50,*" framespacing="0">
  			<frame src="frmresourcetype.html" scrolling="no" frameborder="no">
  			<frame name="frmFolders" src="frmfolders.html" scrolling="auto" frameborder="yes">
  		</frameset>
  		<frameset rows="50,*,50" framespacing="0">
  			<frame name="frmActualFolder" src="frmactualfolder.html" scrolling="no" frameborder="no">
  			<frame name="frmResourcesList" src="frmresourceslist.html" scrolling="auto" frameborder="yes">
  			<frameset cols="150,*,0" framespacing="0" frameborder="no">
  				<frame name="frmCreateFolder" src="frmcreatefolder.html" scrolling="no" frameborder="no">
  				<frame name="frmUpload" src="frmupload.html" scrolling="no" frameborder="no">
  				<frame name="frmUploadWorker" src="" scrolling="no" frameborder="no">
  			</frameset>
  		</frameset>
  	</frameset>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmactualfolder.html
  
  Index: frmactualfolder.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmactualfolder.html
   * 	This page shows the actual folder path.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  		<script type="text/javascript">
  
  function OnResize()
  {
  	divName.style.width = "1px" ;
  	divName.style.width = tdName.offsetWidth + "px" ;
  }
  
  function SetCurrentFolder( resourceType, folderPath )
  {
  	document.getElementById('tdName').innerHTML = folderPath ;
  }
  
  window.onload = function()
  {
  	window.top.IsLoadedActualFolder = true ;
  }
  
  		</script>
  	</head>
  	<body bottomMargin="0" topMargin="0">
  		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
  			<tr>
  				<td>
  					<button style="WIDTH: 100%" type="button">
  						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
  							<tr>
  								<td><img height="32" alt="" src="images/FolderOpened32.gif" width="32"></td>
  								<td>&nbsp;</td>
  								<td id="tdName" width="100%" nowrap class="ActualFolder">/</td>
  								<td>&nbsp;</td>
  								<td><img height="8" src="images/ButtonArrow.gif" width="12"></td>
  								<td>&nbsp;</td>
  							</tr>
  						</table>
  					</button>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html
  
  Index: frmcreatefolder.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmcreatefolder.html
   * 	Page used to create new folders in the current folder.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  		<script type="text/javascript" src="js/fckxml.js"></script>
  		<script type="text/javascript" src="js/common.js"></script>
  		<script language="javascript">
  
  function SetCurrentFolder( resourceType, folderPath )
  {
  	oConnector.ResourceType = resourceType ;
  	oConnector.CurrentFolder = folderPath
  }
  
  function CreateFolder()
  {
  	var sFolderName ;
  	
  	while ( true ) 
  	{
  		sFolderName = prompt( 'Type the name of the new folder:', '' ) ;
  	
  		if ( sFolderName == null )
  			return ;
  		else if ( sFolderName.length == 0 )
  			alert( 'Please type the folder name' ) ;
  		else
  			break ;
  	}
  	
  	oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + escape( sFolderName) , CreateFolderCallBack ) ;
  }
  
  function CreateFolderCallBack( fckXml )
  {
  	// Get the current folder path.
  	var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ;
  	var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ;
  	
  	switch ( iErrorNumber )
  	{
  		case 0 :
  			window.parent.frames['frmResourcesList'].Refresh() ;
  			break ;
  		case 101 :
  			alert( 'Folder already exists' ) ;
  			break ;
  		case 102 :
  			alert( 'Invalid folder name' ) ;
  			break ;
  		case 103 :
  			alert( 'You have no permissions to create the folder' ) ;
  			break ;
  		case 110 :
  			alert( 'Unknown error creating folder' ) ;
  			break ;
  		default :
  			alert( 'Error creating folder. Error number: ' + iErrorNumber ) ;
  			break ;
  	}
  }
  
  window.onload = function()
  {
  	window.top.IsLoadedCreateFolder = true ;
  }
  		</script>
  	</head>
  	<body bottomMargin="0" topMargin="0">
  		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
  			<tr>
  				<td>
  					<button type="button" style="WIDTH: 100%" onclick="CreateFolder();">
  						<table cellSpacing="0" cellPadding="0" border="0">
  							<tr>
  								<td><img height="16" alt="" src="images/Folder.gif" width="16"></td>
  								<td>&nbsp;</td>
  								<td nowrap>Create New Folder</td>
  							</tr>
  						</table>
  					</button>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmfolders.html
  
  Index: frmfolders.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmfolders.html
   * 	This page shows the list of folders available in the parent folder 
   * 	of the current folder.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-19 01:03:21
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  		<script type="text/javascript" src="js/fckxml.js"></script>
  		<script type="text/javascript" src="js/common.js"></script>
  		<script language="javascript">
  
  var sActiveFolder ;
  
  var bIsLoaded = false ;
  var iIntervalId ;
  
  var oListManager = new Object() ;
  
  oListManager.Init = function()
  {
  	this.Table = document.getElementById('tableFiles') ;
  	this.UpRow = document.getElementById('trUp') ;
  
  	this.TableRows = new Object() ;	
  }
  
  oListManager.Clear = function()
  {
  	// Remove all other rows available.
  	while ( this.Table.rows.length > 1 )
  		this.Table.deleteRow(1) ;
  
  	// Reset the TableRows collection.
  	this.TableRows = new Object() ;
  }
  
  oListManager.AddItem = function( folderName, folderPath )
  {
  	// Create the new row.
  	var oRow = this.Table.insertRow(-1) ;
  	oRow.className = 'FolderListFolder' ;
  
  	// Build the link to view the folder.
  	var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ;
  
  	// Add the folder icon cell.
  	var oCell = oRow.insertCell(-1) ;
  	oCell.width = 16 ;
  	oCell.innerHTML = sLink + '<img alt="" src="images/spacer.gif" width="16" height="16" border="0"></a>' ;
  
  	// Add the folder name cell.
  	oCell = oRow.insertCell(-1) ;
  	oCell.noWrap = true ;
  	oCell.innerHTML = '&nbsp;' + sLink + folderName + '</a>' ;
  	
  	this.TableRows[ folderPath ] = oRow ;
  }
  
  oListManager.ShowUpFolder = function( upFolderPath )
  {
  	this.UpRow.style.display = ( upFolderPath != null ? '' : 'none' ) ;
  	
  	if ( upFolderPath != null )
  	{
  		document.getElementById('linkUpIcon').onclick = document.getElementById('linkUp').onclick = function()
  		{
  			LoadFolders( upFolderPath ) ;
  			return false ;
  		}
  	}
  }
  
  function CheckLoaded()
  {
  	if ( window.top.IsLoadedActualFolder 
  		&& window.top.IsLoadedCreateFolder 
  		&& window.top.IsLoadedUpload
  		&& window.top.IsLoadedResourcesList )
  	{
  		window.clearInterval( iIntervalId ) ;
  		bIsLoaded = true ;
  		OpenFolder( sActiveFolder ) ;
  	}
  }
  
  function OpenFolder( folderPath )
  {
  	sActiveFolder = folderPath ;
  
  	if ( ! bIsLoaded )
  	{
  		if ( ! iIntervalId )
  			iIntervalId = window.setInterval( CheckLoaded, 100 ) ;
  		return ;
  	}
  
  	// Change the style for the select row (to show the opened folder).
  	for ( var sFolderPath in oListManager.TableRows )
  	{
  		oListManager.TableRows[ sFolderPath ].className = 
  			( sFolderPath == folderPath ? 'FolderListCurrentFolder' : 'FolderListFolder' ) ;
  	}
  
  	// Set the current folder in all frames.
  	window.parent.frames['frmActualFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
  	window.parent.frames['frmCreateFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
  	window.parent.frames['frmUpload'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ;
  	
  	// Load the resources list for this folder.
  	window.parent.frames['frmResourcesList'].LoadResources( oConnector.ResourceType, folderPath ) ;
  }
  
  function LoadFolders( folderPath )
  {
  	// Clear the folders list.
  	oListManager.Clear() ;
  
  	// Get the parent folder path.
  	var sParentFolderPath ;
  	if ( folderPath != '/' )
  		sParentFolderPath = folderPath.substring( 0, folderPath.lastIndexOf( '/', folderPath.length - 2 ) + 1 ) ;
  
  	// Show/Hide the Up Folder.
  	oListManager.ShowUpFolder( sParentFolderPath ) ;
  	
  	if ( folderPath != '/' )
  	{
  		sActiveFolder = folderPath ;
  		oConnector.CurrentFolder = sParentFolderPath
  		oConnector.SendCommand( 'GetFolders', null, GetFoldersCallBack ) ;
  	}
  	else
  		OpenFolder( '/' ) ;
  }
  
  function GetFoldersCallBack( fckXml )
  {
  	// Get the current folder path.
  	var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
  	var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ;
  	
  	var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
  	
  	for ( var i = 0 ; i < oNodes.length ; i++ )
  	{
  		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
  		oListManager.AddItem( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ;
  	}
  	
  	OpenFolder( sActiveFolder ) ;
  }
  
  function SetResourceType( type )
  {
  	oConnector.ResourceType = type ;
  	LoadFolders( '/' ) ;
  }
  
  window.onload = function()
  {
  	oListManager.Init() ;
  	
  	if ( oConnector.ResourceType.length = 0 )
  		SetResourceType( 'File' ) ;
  	else
  		LoadFolders( '/' ) ;
  }
  		</script>
  	</head>
  	<body class="FileArea" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10">
  		<table id="tableFiles" cellSpacing="0" cellPadding="0" width="100%" border="0">
  			<tr id="trUp" style="DISPLAY: none">
  				<td width="16"><a id="linkUpIcon" href="#"><img alt="" src="images/FolderUp.gif" width="16" height="16" border="0"></a></td>
  				<td nowrap width="100%">&nbsp;<a id="linkUp" href="#">..</a></td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmresourceslist.html
  
  Index: frmresourceslist.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmresourceslist.html
   * 	This page shows all resources available in a folder in the File Browser.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-19 01:01:50
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  		<script type="text/javascript" src="js/fckxml.js"></script>
  		<script type="text/javascript" src="js/common.js"></script>
  		<script language="javascript">
  
  var oListManager = new Object() ;
  
  oListManager.Init = function()
  {
  	this.Table = document.getElementById('tableFiles') ;
  }
  
  oListManager.Clear = function()
  {
  	// Remove all other rows available.
  	while ( this.Table.rows.length > 0 )
  		this.Table.deleteRow(0) ;
  }
  
  oListManager.AddFolder = function( folderName, folderPath )
  {
  	// Create the new row.
  	var oRow = this.Table.insertRow(-1) ;
  
  	// Build the link to view the folder.
  	var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ;
  
  	// Add the folder icon cell.
  	var oCell = oRow.insertCell(-1) ;
  	oCell.width = 16 ;
  	oCell.innerHTML = sLink + '<img alt="" src="images/Folder.gif" width="16" height="16" border="0"></a>' ;
  
  	// Add the folder name cell.
  	oCell = oRow.insertCell(-1) ;
  	oCell.noWrap = true ;
  	oCell.colSpan = 2 ;
  	oCell.innerHTML = '&nbsp;' + sLink + folderName + '</a>' ;
  }
  
  oListManager.AddFile = function( fileName, fileUrl, fileSize )
  {
  	// Create the new row.
  	var oRow = this.Table.insertRow(-1) ;
  
  	// Build the link to view the folder.
  	var sLink = '<a href="#" onclick="OpenFile(\'' + fileUrl + '\');return false;">' ;
  
  	// Get the file icon.
  	var sIcon = oIcons.GetIcon( fileName ) ;
  
  	// Add the file icon cell.
  	var oCell = oRow.insertCell(-1) ;
  	oCell.width = 16 ;
  	oCell.innerHTML = sLink + '<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' ;
  
  	// Add the file name cell.
  	oCell = oRow.insertCell(-1) ;
  	oCell.innerHTML = '&nbsp;' + sLink + fileName + '</a>' ;
  	
  	// Add the file size cell.
  	oCell = oRow.insertCell(-1) ;
  	oCell.noWrap = true ;
  	oCell.align = 'right' ;
  	oCell.innerHTML = '&nbsp;' + fileSize + ' KB' ;
  }
  
  function OpenFolder( folderPath )
  {
  	// Load the resources list for this folder.
  	window.parent.frames['frmFolders'].LoadFolders( folderPath ) ;
  }
  
  function OpenFile( fileUrl )
  {
  	window.top.opener.SetUrl( fileUrl ) ;
  	window.top.close() ;
  	window.top.opener.focus() ;
  }
  
  function LoadResources( resourceType, folderPath )
  {
  	oListManager.Clear() ;
  	oConnector.ResourceType = resourceType ;
  	oConnector.CurrentFolder = folderPath
  	oConnector.SendCommand( 'GetFoldersAndFiles', null, GetFoldersAndFilesCallBack ) ;
  }
  
  function Refresh()
  {
  	LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ;
  }
  
  function GetFoldersAndFilesCallBack( fckXml )
  {
  	// Get the current folder path.
  	var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ;
  	var sCurrentFolderPath	= oNode.attributes.getNamedItem('path').value ;
  	var sCurrentFolderUrl	= oNode.attributes.getNamedItem('url').value ;
  
  	// Add the Folders.	
  	var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ;
  	for ( var i = 0 ; i < oNodes.length ; i++ )
  	{
  		var sFolderName = oNodes[i].attributes.getNamedItem('name').value ;
  		oListManager.AddFolder( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ;
  	}
  	
  	// Add the Files.	
  	var oNodes = fckXml.SelectNodes( 'Connector/Files/File' ) ;
  	for ( var i = 0 ; i < oNodes.length ; i++ )
  	{
  		var sFileName = oNodes[i].attributes.getNamedItem('name').value ;
  		var sFileSize = oNodes[i].attributes.getNamedItem('size').value ;
  		oListManager.AddFile( sFileName, sCurrentFolderUrl + sFileName, sFileSize ) ;
  	}
  }
  
  window.onload = function()
  {
  	oListManager.Init() ;
  	window.top.IsLoadedResourcesList = true ;
  }
  		</script>
  	</head>
  	<body class="FileArea" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10">
  		<table id="tableFiles" cellSpacing="1" cellPadding="0" width="100%" border="0">
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmresourcetype.html
  
  Index: frmresourcetype.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmresourcetype.html
   * 	This page shows the list of available resource types.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-19 00:57:24
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  		<link href="Browser.css" type="text/css" rel="stylesheet">
  		<script type="text/javascript" src="js/common.js"></script>
  		<script language="javascript">
  
  function SetResourceType( type )
  {
  	window.parent.frames["frmFolders"].SetResourceType( type ) ;
  }
  
  var aTypes = [
  	['File','File'],
  	['Image','Image'],
  	['Flash','Flash'],
  	['Media','Media']
  ] ;
  
  window.onload = function()
  {
  	var bHasType = ( oConnector.ResourceType.length > 0 ) ;
  	
  	for ( var i = 0 ; i < aTypes.length ; i++ )
  	{
  		if ( !bHasType || aTypes[i][0] == oConnector.ResourceType )
  			AddSelectOption( cmbType, aTypes[i][1], aTypes[i][0] ) ;
  	}
  }
  
  		</script>
  	</head>
  	<body bottomMargin="0" topMargin="0">
  		<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
  			<tr>
  				<td nowrap>
  					Resource Type<BR>
  					<select id="cmbType" style="WIDTH: 100%" onchange="SetResourceType(this.value);">
  					</select>
  				</td>
  			</tr>
  		</table>
  	</body>
  </html>
  
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/frmupload.html
  
  Index: frmupload.html
  ===================================================================
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: frmupload.html
   * 	Page used to upload new files in the current folder.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:53
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  	<head>
  		<link href="Browser.css" type="text/css" rel="stylesheet" />
  		<script type="text/javascript" src="js/common.js"></script>
  		<script language="javascript">
  		
  function SetCurrentFolder( resourceType, folderPath )
  {
  	var sUrl = oConnector.ConnectorUrl +'?Command=FileUpload' ;
  	sUrl += '&Type=' + resourceType ;
  	sUrl += '&CurrentFolder=' + folderPath ;
  	
  	document.getElementById('frmUpload').action = sUrl ;
  }
  
  function OnSubmit()
  {
  	if ( document.getElementById('NewFile').value.length == 0 )
  	{
  		alert( 'Please select a file from your computer' ) ;
  		return false ;
  	}
  
  	// Set the interface elements.
  	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ;
  	document.getElementById('btnUpload').disabled = true ;
  	
  	return true ;
  }
  
  function OnUploadCompleted( errorNumber, fileName )
  {
  	// Reset the Upload Worker Frame.
  	window.parent.frames['frmUploadWorker'].location = '' ;
  	
  	// Reset the upload form.
  	document.getElementById('frmUpload').reset() ;
  	
  	// Reset the interface elements.
  	document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ;
  	document.getElementById('btnUpload').disabled = false ;
  	
  	switch ( errorNumber )
  	{
  		case 0 :
  			window.parent.frames['frmResourcesList'].Refresh() ;
  			break ;
  		case 201 :
  			window.parent.frames['frmResourcesList'].Refresh() ;
  			alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
  			break ;
  		case 202 :
  			alert( 'Invalid file' ) ;
  			break ;
  		default :
  			alert( 'Error on file upload. Error number: ' + errorNumber ) ;
  			break ;
  	}
  }
  
  window.onload = function()
  {
  	window.top.IsLoadedUpload = true ;
  }
  		</script>
  	</head>
  	<body bottomMargin="0" topMargin="0">
  		<form id="frmUpload" action="" target="frmUploadWorker" method="post" enctype="multipart/form-data" onsubmit="return OnSubmit();">
  			<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0">
  				<tr>
  					<td nowrap>
  						<span id="eUploadMessage">Upload a new file in this folder</span><br>
  						<table cellSpacing="0" cellPadding="0" width="100%" border="0">
  							<tr>
  								<td width="100%"><input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file"></td>
  								<td nowrap>&nbsp;<input id="btnUpload" type="submit" value="Upload"></td>
  							</tr>
  						</table>
  					</td>
  				</tr>
  			</table>
  		</form>
  	</body>
  </html>
  
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default/connectors/aspx
                        connector.aspx
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx
  
  Index: connector.aspx
  ===================================================================
  <%@ Page language="c#" Inherits="FredCK.FCKeditorV2.FileBrowserConnector" AutoEventWireup="false" %>
  <!--
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: connector.aspx
   * 	This is the File Browser Connector for ASP.NET.
   * 	
   * 	The code of this page if included in the FredCK.FCKeditorV2.dll file. So to
   * 	use it you must include the DLL in your "bin" directory.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
  -->
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default/images
                        ButtonArrow.gif Folder.gif Folder32.gif
                        FolderOpened.gif FolderOpened32.gif FolderUp.gif
                        spacer.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/Folder.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/Folder32.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/spacer.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default/images/icons/32
                        ai.gif avi.gif bmp.gif cs.gif default.icon.gif
                        dll.gif doc.gif exe.gif fla.gif gif.gif htm.gif
                        html.gif jpg.gif js.gif mdb.gif mp3.gif pdf.gif
                        ppt.gif rdp.gif swf.gif swt.gif txt.gif vsd.gif
                        xls.gif xml.gif zip.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default/images/icons
                        ai.gif avi.gif bmp.gif cs.gif default.icon.gif
                        dll.gif doc.gif exe.gif fla.gif gif.gif htm.gif
                        html.gif jpg.gif js.gif mdb.gif mp3.gif pdf.gif
                        ppt.gif rdp.gif swf.gif swt.gif txt.gif vsd.gif
                        xls.gif xml.gif zip.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/html.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/js.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:24

  Added:       util/fckeditor/editor/filemanager/browser/default/js
                        common.js fckxml.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/js/common.js
  
  Index: common.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: common.js
   * 	Common objects and functions shared by all pages that compose the
   * 	File Browser dialog window.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-19 00:51:22
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  function AddSelectOption( selectElement, optionText, optionValue )
  {
  	var oOption = document.createElement("OPTION") ;
  
  	oOption.text	= optionText ;
  	oOption.value	= optionValue ;	
  
  	selectElement.options.add(oOption) ;
  
  	return oOption ;
  }
  
  function GetUrlParam( paramName )
  {
  	var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ;
  	var oMatch = oRegex.exec( window.top.location.search ) ;
  	
  	if ( oMatch && oMatch.length > 1 )
  		return oMatch[1] ;
  	else
  		return '' ;
  }
  
  var oConnector = new Object() ;
  oConnector.CurrentFolder	= '/' ;
  oConnector.ConnectorUrl		= GetUrlParam( 'Connector' ) ;
  oConnector.ResourceType		= GetUrlParam( 'Type' ) ;
  
  oConnector.SendCommand = function( command, params, callBackFunction )
  {
  	var sUrl = this.ConnectorUrl + '?Command=' + command ;
  	sUrl += '&Type=' + this.ResourceType ;
  	sUrl += '&CurrentFolder=' + escape( this.CurrentFolder ) ;
  	
  	if ( params ) sUrl += '&' + params ;
  
  	var oXML = new FCKXml() ;
  	
  	if ( callBackFunction )
  		oXML.LoadUrl( sUrl, callBackFunction ) ;	// Asynchronous load.
  	else
  		return oXML.LoadUrl( sUrl ) ;
  }
  
  var oIcons = new Object() ;
  
  oIcons.AvailableIconsArray = [ 
  	'ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js',
  	'mdb','mp3','pdf','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip' ] ;
  	
  oIcons.AvailableIcons = new Object() ;
  
  for ( var i = 0 ; i < oIcons.AvailableIconsArray.length ; i++ )
  	oIcons.AvailableIcons[ oIcons.AvailableIconsArray[i] ] = true ;
  
  oIcons.GetIcon = function( fileName )
  {
  	var sExtension = fileName.substr( fileName.lastIndexOf('.') + 1 ).toLowerCase() ;
  
  	if ( this.AvailableIcons[ sExtension ] == true )
  		return sExtension ;
  	else
  		return 'default.icon' ;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/filemanager/browser/default/js/fckxml.js
  
  Index: fckxml.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckxml.js
   * 	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.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:53
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKXml = function()
  {}
  
  FCKXml.prototype.GetHttpRequest = function()
  {
  	if ( window.XMLHttpRequest )		// Gecko
  		return new XMLHttpRequest() ;
  	else if ( window.ActiveXObject )	// IE
  		return new ActiveXObject("MsXml2.XmlHttp") ;
  }
  
  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 )
  			{
  				oFCKXml.DOMDocument = oXmlHttp.responseXML ;
  				asyncFunctionPointer( oFCKXml ) ;
  			}
  		}
  	}
  	
  	oXmlHttp.send( null ) ;
  	
  	if ( ! bAsync )
  		this.DOMDocument = oXmlHttp.responseXML ;
  }
  
  FCKXml.prototype.SelectNodes = function( xpath )
  {
  	if ( document.all )		// 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 ( document.all )		// 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 ;
  	}
  }
  
  
  


comfuture    04/11/24 21:25:25

  Added:       util/fckeditor/editor/images/smiley/fun aiua.gif ak.gif
                        alien.gif alien2.gif angry.gif angry1.gif
                        apophys.gif assjani.gif asthanos.gif bazuzeus.gif
                        beaute.gif bigsmile.gif blush.gif boid.gif bonk.gif
                        bored.gif borg.gif capo.gif confused.gif cool.gif
                        crazy.gif cwm14.gif demis_roussos.gif devil.gif
                        devil2.gif double0smile.gif eek3.gif eltaf.gif
                        gele.gif halm.gif happy.gif icon12.gif icon23.gif
                        icon26.gif icon_angel.gif icon_bandit.gif
                        icon_bravo.gif icon_clown.gif jesors.gif
                        jesors1.gif lol3.gif love.gif mad.gif megaphone.gif
                        mmm.gif music.gif notify.gif nuts.gif obanon.gif
                        ouaip.gif pleure.gif plugin.gif question.gif
                        question2.gif rasta2.gif rastapop.gif rosebud.gif
                        sad.gif sad2.gif shocked.gif sick.gif sick2.gif
                        slaap.gif sleep.gif smile.gif smiley_peur.gif
                        sors.gif sovxx.gif spamafote.gif tap67.gif
                        thumbdown.gif thumbup.gif tigi.gif toad666.gif
                        tongue.gif tuffgong.gif urgeman.gif vanadium.gif
                        wink.gif worship.gif wouaf.gif wow.gif xp1700.gif
                        yltype.gif yopyopyop.gif youpi.gif zoor.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/aiua.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/ak.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/alien.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/alien2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/angry.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/angry1.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/apophys.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/assjani.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/asthanos.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/bazuzeus.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/beaute.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/bigsmile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/blush.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/boid.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/bonk.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/bored.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/borg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/capo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/confused.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/cool.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/crazy.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/cwm14.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/demis_roussos.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/devil.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/devil2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/double0smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/eek3.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/eltaf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/gele.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/halm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/happy.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon12.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon23.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon26.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon_angel.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon_bandit.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon_bravo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/icon_clown.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/jesors.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/jesors1.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/lol3.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/love.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/mad.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/megaphone.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/mmm.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/music.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/notify.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/nuts.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/obanon.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/ouaip.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/pleure.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/plugin.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/question.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/question2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/rasta2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/rastapop.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/rosebud.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sad.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sad2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/shocked.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sick.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sick2.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/slaap.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sleep.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/smiley_peur.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sors.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/sovxx.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/spamafote.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/tap67.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/thumbdown.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/thumbup.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/tigi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/toad666.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/tongue.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/tuffgong.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/urgeman.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/vanadium.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/wink.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/worship.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/wouaf.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/wow.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/xp1700.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/yltype.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/yopyopyop.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/youpi.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/fun/zoor.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:26

  Added:       util/fckeditor/editor/images/smiley/msn angel_smile.gif
                        angry_smile.gif broken_heart.gif cake.gif
                        confused_smile.gif cry_smile.gif devil_smile.gif
                        embaressed_smile.gif envelope.gif heart.gif
                        kiss.gif lightbulb.gif omg_smile.gif
                        regular_smile.gif sad_smile.gif shades_smile.gif
                        teeth_smile.gif thumbs_down.gif thumbs_up.gif
                        tounge_smile.gif whatchutalkingabout_smile.gif
                        wink_smile.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/angel_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/angry_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/broken_heart.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/cake.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/confused_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/cry_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/devil_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/embaressed_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/envelope.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/heart.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/kiss.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/lightbulb.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/omg_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/regular_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/sad_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/shades_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/teeth_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/thumbs_down.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/thumbs_up.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/tounge_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/images/smiley/msn/wink_smile.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:26

  Added:       util/fckeditor/editor/images spacer.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/images/spacer.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:26

  Added:       util/fckeditor/editor/js fck_startup.js
                        fckeditorcode_gecko_1.js fckeditorcode_gecko_2.js
                        fckeditorcode_ie_1.js fckeditorcode_ie_2.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/js/fck_startup.js
  
  Index: fck_startup.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * This file has been compacted for best loading performance.
   * 
   * Version: 2.0 Beta 2
   * Created: 2004-09-10 02:40:05
   */
  var FCKBrowserInfo=new Object();var sAgent=navigator.userAgent.toLowerCase();FCKBrowserInfo.IsIE=sAgent.indexOf("msie") != -1;FCKBrowserInfo.IsGecko=! FCKBrowserInfo.IsIE;if (FCKBrowserInfo.IsIE){FCKBrowserInfo.MajorVer=navigator.appVersion.match(/MSIE (.)/)[1];FCKBrowserInfo.MinorVer=navigator.appVersion.match(/MSIE .\.(.)/)[1];}else{FCKBrowserInfo.MajorVer=0;FCKBrowserInfo.MinorVer=0;};FCKBrowserInfo.IsIE55OrMore=FCKBrowserInfo.IsIE && (FCKBrowserInfo.MajorVer > 5 || FCKBrowserInfo.MinorVer >=5);
  var FCKScriptLoader=new Object();FCKScriptLoader.IsLoading=false;FCKScriptLoader.Queue=new Array();FCKScriptLoader.AddScript=function(scriptPath){FCKScriptLoader.Queue[ FCKScriptLoader.Queue.length ]=scriptPath;if (!this.IsLoading) this.CheckQueue();};FCKScriptLoader.CheckQueue=function(){if (this.Queue.length > 0){this.IsLoading=true;var sScriptPath=this.Queue[0];var oTempArray=new Array();for (i=1 ; i < this.Queue.length ; i++) oTempArray[ i - 1 ]=this.Queue[ i ];this.Queue=oTempArray;var e;if (sScriptPath.lastIndexOf( '.css' ) > 0){e=document.createElement('LINK');e.rel='stylesheet';e.type='text/css';}else{e=document.createElement("script");e.type="text/javascript";};document.getElementsByTagName("head")[0].appendChild( e);var oEvent=function(){if (this.tagName=='LINK' || !this.readyState || this.readyState == 'loaded') FCKScriptLoader.CheckQueue();};if (e.tagName=='LINK'){if (FCKBrowserInfo.IsIE) e.onload=oEvent;else FCKScriptLoader.CheckQueue();e.href=sScriptPath;}else{e.onload=e.onreadystatechange=oEvent;e.src=sScriptPath;};}else{this.IsLoading=false;if (this.OnEmpty) this.OnEmpty();};}
  var FCKConfig=new Object();if (document.location.protocol=='file:'){FCKConfig.BasePath=document.location.pathname.substr(1);FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');FCKConfig.BasePath='file://' + FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);}else FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.LoadHiddenField=function(){var oConfigField=window.parent.document.getElementById(FCK.Name + '___Config');if (! oConfigField) return;var aCouples=oConfigField.value.split('&');for (var i=0 ; i < aCouples.length ; i++){var aConfig=aCouples[i].split('=');var sConfigName=aConfig[0];var sConfigValue=aConfig[1];if (sConfigValue=="true") FCKConfig[sConfigName]=true;else if (sConfigValue=="false") FCKConfig[sConfigName]=false;else if (! isNaN(sConfigValue)) FCKConfig[sConfigName]=parseInt(sConfigValue);else FCKConfig[sConfigName]=sConfigValue;};}
  window.document.oncontextmenu=function(e){if (e) e.preventDefault();return false;};if (! FCKBrowserInfo.IsIE){window.onresize=function(){var oFrame=document.getElementById("eEditorArea");oFrame.height=0;var oCell=document.getElementById("eWysiwygCell");var iHeight=oCell.offsetHeight;oFrame.height=iHeight - 2;};};window.onload=function(){FCKScriptLoader.OnEmpty=function(){FCKConfig.LoadHiddenField();LoadStyles();};FCKScriptLoader.AddScript('../fckconfig.js');};function LoadStyles(){FCKScriptLoader.OnEmpty=LoadScripts;FCKScriptLoader.AddScript(FCKConfig.SkinPath + 'fck_editor.css');FCKScriptLoader.AddScript(FCKConfig.SkinPath + 'fck_contextmenu.css');};function LoadScripts(){FCKScriptLoader.OnEmpty=null;if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_1.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_1.js');};function LoadLanguageFile(){FCKScriptLoader.OnEmpty=function(){this.OnEmpty=null;window.document.dir=FCKLang.Dir;FCK.StartEditor();};FCKScriptLoader.AddScript('lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js');}
  var FCKURLParams=new Object();var aParams=document.location.search.substr(1).split('&');for (i=0 ; i < aParams.length ; i++){var aParam=aParams[i].split('=');var sParamName=aParam[0];var sParamValue=aParam[1];FCKURLParams[ sParamName ]=sParamValue;}
  FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-1000;FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYTEXT=0;FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=2;FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;
  var FCK=new Object();FCK.Name=FCKURLParams[ 'InstanceName' ];FCK.LinkedField=window.parent.document.getElementById(FCK.Name);FCK.Status=FCK_STATUS_NOTLOADED;FCK.EditMode=FCK_EDITMODE_WYSIWYG;FCK.PasteEnabled=false;
  var FCKeditorAPI;if (!window.parent.FCKeditorAPI){FCKeditorAPI=window.parent.FCKeditorAPI=new Object();FCKeditorAPI.__Instances=new Object();FCKeditorAPI.Version='2.0 Beta 2';FCKeditorAPI.GetInstance=function(instanceName){return this.__Instances[ instanceName ];};}else FCKeditorAPI=window.parent.FCKeditorAPI;FCKeditorAPI.__Instances[ FCK.Name ]=FCK;
  
  
  
  1.1                  siminweb/util/fckeditor/editor/js/fckeditorcode_gecko_1.js
  
  Index: fckeditorcode_gecko_1.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * This file has been compacted for best loading performance.
   * 
   * Version: 2.0 Beta 2
   * Created: 2004-09-10 02:40:05
   */
  var FCKDebug=new Object();if (FCKConfig.Debug){FCKDebug.Output=function(message, color){if (! FCKConfig.Debug) return;if (message !=null && isNaN( message )){message=message.replace(/</g, "&lt;");};if (!this.DebugWindow || this.DebugWindow.closed){this.DebugWindow=window.open('fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true);};if (this.DebugWindow.Output){this.DebugWindow.Output(message, color);};};}else{FCKDebug.Output=function() {};};
  var FCKTools=new Object();FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.SetLinkedFieldValue=function(value){FCK.LinkedField.value=value;};FCKTools.AttachToLinkedFieldFormSubmit=function(functionPointer){var oForm=FCK.LinkedField.form;if (!oForm) return;if (FCKBrowserInfo.IsIE) oForm.attachEvent("onsubmit", functionPointer);else oForm.addEventListener('submit', functionPointer, true);if (! oForm.updateFCKEditor) oForm.updateFCKEditor=new Array();oForm.updateFCKEditor[oForm.updateFCKEditor.length]=functionPointer;if (! oForm.originalSubmit){oForm.originalSubmit=oForm.submit;oForm.submit=function(){if (this.updateFCKEditor){for (var i=0 ; i < this.updateFCKEditor.length ; i++) this.updateFCKEditor[i]();};this.originalSubmit();};};};FCKTools.AddSelectOption=function(targetDocument, selectElement, optionText, optionValue){var oOption=targetDocument.createElement("OPTION");oOption.text=optionText;oOption.value=optionValue;selectElement.options.add(oOption);return oOption;};FCKTools.RemoveAllSelectOptions=function(selectElement){for (var i=selectElement.options.length - 1 ; i >=0 ; i--){selectElement.options.remove(i);};};FCKTools.SelectNoCase=function(selectElement, value, defaultValue){var sNoCaseValue=value.toString().toLowerCase();for (var i=0 ; i < selectElement.options.length ; i++){if (sNoCaseValue==selectElement.options[i].value.toLowerCase()){selectElement.selectedIndex=i;return;};};if (defaultValue !=null ) FCKTools.SelectNoCase( selectElement, defaultValue);};FCKTools.HTMLEncode=function(text){text=text.replace(/&/g, "&amp;");text=text.replace(/"/g, "&quot;");text=text.replace(/</g, "&lt;");text=text.replace(/>/g, "&gt;");text=text.replace(/'/g, "&#146;");return text;};FCKTools.GetResultingArray=function(arraySource, separator){switch (typeof( arraySource )){case "string" : return arraySource.split(separator);case "function" : return separator();default : if (isArray( arraySource )) return arraySource;else return new Array();};};FCKTools.GetElementPosition=function(el){var c={ X:0, Y:0 };while (el){c.X +=el.offsetLeft;c.Y +=el.offsetTop;el=el.offsetParent;};return c;};FCKTools.GetElementAscensor=function(element, ascensorTagName){var e=element.parentNode;while (e){if (e.nodeName==ascensorTagName) return e;e=e.parentNode;};};
  FCKTools.AppendStyleSheet=function(documentElement, cssFileUrl){var e=documentElement.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=cssFileUrl;documentElement.getElementsByTagName("HEAD").item(0).appendChild( e);};FCKTools.ClearElementAttributes=function(element){for (var i=0 ; i < element.attributes.length ; i++){element.removeAttribute(element.attributes[i].name, 0);};};FCKTools.GetAllChildrenIds=function(parentElement){var aIds=new Array();var fGetIds=function(parent){for (var i=0 ; i < parent.childNodes.length ; i++){var sId=parent.childNodes[i].id;if (sId && sId.length > 0) aIds[ aIds.length ]=sId;fGetIds(parent.childNodes[i]);};};fGetIds(parentElement);return aIds;}
  var FCKLanguageManager=new Object();FCKLanguageManager.AvailableLanguages={'ar'	: 'Arabic', 'en'	: 'English', 'it'	: 'Italian','ko':'Korean'};FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){ try { var sUserLang=navigator.language.toLowerCase() } catch(e) { var sUserLan = navigator.userLanguage.toLowerCase(); } if (sUserLang == undefined) sUserLang = 'en';FCKDebug.Output('Navigator Language = ' + sUserLang);if (sUserLang.length >=5){sUserLang=sUserLang.substr(0,5);if (this.AvailableLanguages[sUserLang]) return sUserLang;};if (sUserLang.length >=2){sUserLang=sUserLang.substr(0,2);if (this.AvailableLanguages[sUserLang]) return sUserLang;};};return FCKConfig.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(targetDocument, tag, propertyToSet){var aInputs=targetDocument.getElementsByTagName(tag);for (var i=0 ; i < aInputs.length ; i++){if (aInputs[i].attributes['fckLang']){var s=FCKLang[ aInputs[i].attributes["fckLang"].value ];eval('aInputs[i].' + propertyToSet + ' = s');};};};FCKLanguageManager.TranslatePage=function(targetDocument){this.TranslateElements(targetDocument, 'INPUT', 'value');this.TranslateElements(targetDocument, 'SPAN', 'innerHTML');this.TranslateElements(targetDocument, 'OPTION', 'innerHTML');};FCKLanguageManager.ActiveLanguage=new Object();FCKLanguageManager.ActiveLanguage.Code=FCKLanguageManager.GetActiveLanguage();FCKLanguageManager.ActiveLanguage.Name=FCKLanguageManager.AvailableLanguages[ FCKLanguageManager.ActiveLanguage.Code ];FCK.Language=FCKLanguageManager;LoadLanguageFile();
  var FCKEvents=function(eventsOwner){this.Owner=eventsOwner;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(eventName, functionPointer, params){if (! this.RegisteredEvents[ eventName ] ) this.RegisteredEvents[ eventName ]=new Array();this.RegisteredEvents[ eventName ][ this.RegisteredEvents[ eventName ].length ]=functionPointer;};FCKEvents.prototype.FireEvent=function(eventName, params){var bReturnValue=true;FCKDebug.Output('Firing event: ' + eventName, 'Fuchsia');var oCalls=this.RegisteredEvents[ eventName ];if (oCalls){for (i in oCalls){if (typeof( oCalls[ i ] )=="function"){bReturnValue=(bReturnValue && oCalls[ i ]( params ));}else{bReturnValue=(bReturnValue && eval( oCalls[ i ] ));};};};return bReturnValue;};
  var FCKXHtml=new Object();FCKXHtml.GetXHTML=function(node){if (window.ActiveXObject) this.XML=new ActiveXObject('Msxml2.DOMDocument');else this.XML=document.implementation.createDocument('', '', null);this.MainNode=this.XML.appendChild(this.XML.createElement( 'XHTML' ));this._AppendChildNodes(this.MainNode, node);var sXHTML=document.all ? this.MainNode.xml : FCKXHtml._GetGeckoNodeXml(this.MainNode);return sXHTML.substr(7, sXHTML.length - 15);};FCKXHtml._GetGeckoNodeXml=function(node){var oSerializer=new XMLSerializer();return oSerializer.serializeToString(node);};FCKXHtml._AppendAttribute=function(xmlNode, attributeName, attributeValue){if (attributeName=='_moz_dirty') return;var oXmlAtt=this.XML.createAttribute(attributeName);if (typeof( attributeValue )=='boolean' && attributeValue == true) oXmlAtt.value=attributeName;else oXmlAtt.value=attributeValue;xmlNode.attributes.setNamedItem(oXmlAtt);};FCKXHtml._AppendChildNodes=function(xmlNode, htmlNode){var oChildren=htmlNode.childNodes;var i=0;while (i < oChildren.length){i +=this._AppendNode(xmlNode, oChildren[i]);};};FCKXHtml._AppendNode=function(xmlNode, htmlNode){var iAddedNodes=1;switch (htmlNode.nodeType){case 1 : var sNodeName=htmlNode.nodeName.toLowerCase();var oNode=xmlNode.appendChild(this.XML.createElement( sNodeName ));var oAttributes=htmlNode.attributes;for (var n=0 ; n < oAttributes.length ; n++){var oAttribute=oAttributes[n];if (oAttribute.specified){var sAttName=oAttribute.nodeName.toLowerCase();var sAttValue=oAttribute.nodeValue;if (sAttName=='style' && document.all) sAttValue=htmlNode.style.cssText;this._AppendAttribute(oNode, sAttName, sAttValue);};};switch (sNodeName){case "script" : case "style" : oNode.appendChild(this.XML.createCDATASection( htmlNode.text ));break;case "abbr" : if (document.all){var oNextNode=htmlNode.nextSibling;while (true){iAddedNodes++;if (oNextNode && oNextNode.nodeName !='/ABBR'){this._AppendNode(oNode, oNextNode);oNextNode=oNextNode.nextSibling;}else break;};break;};case "area" : if (document.all && ! oNode.attributes.getNamedItem( 'coords' )){var sCoords=htmlNode.getAttribute('coords', 2);if (sCoords && sCoords !='0,0,0') this._AppendAttribute(oNode, 'coords', sCoords);};case "img" : if (! oNode.attributes.getNamedItem( 'alt' )) this._AppendAttribute(oNode, 'alt', '');default : this._AppendChildNodes(oNode, htmlNode);break;};break;case 3 : xmlNode.appendChild(this.XML.createTextNode( htmlNode.nodeValue ));break;default : xmlNode.appendChild(this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ));break;};return iAddedNodes;};
  FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.SetStatus=function(newStatus){this.Status=newStatus;if (newStatus==FCK_STATUS_ACTIVE){if (FCKConfig.StartupFocus) FCK.Focus();if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_2.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_2.js');};this.Events.FireEvent('OnStatusChange', newStatus);if (this.OnStatusChange ) this.OnStatusChange( newStatus);};FCK.SetHTML=function(html, forceWYSIWYG){if (forceWYSIWYG || FCK.EditMode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsGecko) FCK.EditorDocument.designMode="off";this.EditorDocument.body.innerHTML=html;if (FCKBrowserInfo.IsGecko){FCK.EditorDocument.designMode="on";FCK.EditorDocument.execCommand("useCSS", false, !FCKConfig.GeckoUseSPAN);};}else document.getElementById('eSourceField').value = html;};FCK.GetHTML=function(){if (FCK.EditMode==FCK_EDITMODE_WYSIWYG) return this.EditorDocument.body.innerHTML;else return document.getElementById('eSourceField').value;};FCK.GetXHTML=function(){var bSource=(FCK.EditMode==FCK_EDITMODE_SOURCE);if (bSource) this.SwitchEditMode();var sXHTML=FCKXHtml.GetXHTML(this.EditorDocument.body);if (bSource) this.SwitchEditMode();return sXHTML;};FCK.UpdateLinkedField=function(){if (FCKConfig.EnableXHTML) FCKTools.SetLinkedFieldValue(FCK.GetXHTML());else FCKTools.SetLinkedFieldValue(FCK.GetHTML());};FCK.ShowContextMenu=function(x, y){if (this.Status !=FCK_STATUS_COMPLETE) return;FCKContextMenu.Show(x, y);this.Events.FireEvent("OnContextMenu");};
  FCK.Description="FCKeditor for Gecko Browsers";FCK.StartEditor=function(){this.EditorWindow=window.frames[ 'eEditorArea' ];this.EditorDocument=this.EditorWindow.document;this.SetHTML(FCKTools.GetLinkedFieldValue());FCKTools.AttachToLinkedFieldFormSubmit(this.UpdateLinkedField);var oOnContextMenu=function(e){e.preventDefault();FCK.ShowContextMenu(e.clientX, e.clientY);};this.EditorDocument.addEventListener('contextmenu', oOnContextMenu, true);var oOnKeyDown=function(e){if (e.ctrlKey && !e.shiftKey && !e.altKey){if (e.which==86 || e.which==118){if (FCK.Status==FCK_STATUS_COMPLETE){if (!FCK.Events.FireEvent( "OnPaste" )) e.preventDefault();}else e.preventDefault();};};};this.EditorDocument.addEventListener('keydown', oOnKeyDown, true);var oOnSelectionChange=function(e){FCK.Events.FireEvent("OnSelectionChange");};this.EditorDocument.addEventListener('mouseup', oOnSelectionChange, false);this.EditorDocument.addEventListener('keyup', oOnSelectionChange, false);this.SetStatus(FCK_STATUS_ACTIVE);};FCK.Focus=function(){this.EditorWindow.focus();};
  
  
  
  1.1                  siminweb/util/fckeditor/editor/js/fckeditorcode_gecko_2.js
  
  Index: fckeditorcode_gecko_2.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * This file has been compacted for best loading performance.
   * 
   * Version: 2.0 Beta 2
   * Created: 2004-09-10 02:40:08
   */
  FCK.ExecuteNamedCommand=function(commandName, commandParameter){FCK.Focus();FCK.EditorDocument.execCommand(commandName, false, commandParameter);FCK.Events.FireEvent('OnSelectionChange');};FCK.GetNamedCommandState=function(commandName){try{if (!FCK.EditorDocument.queryCommandEnabled( commandName )) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(commandName) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;};};FCK.GetNamedCommandValue=function(commandName){var sValue='';var eState=FCK.GetNamedCommandState(commandName);if (eState==FCK_TRISTATE_DISABLED) return null;try{sValue=this.EditorDocument.queryCommandValue(commandName);}catch(e) {};return sValue ? sValue : '';};FCK.CreateLink=function(url){if (url.length==0) FCK.ExecuteNamedCommand('Unlink');else{FCK.ExecuteNamedCommand('CreateLink', "javascript:void(0);/*fckeditortemplink*/");var oLinks=this.EditorDocument.links;for (i=0 ; i < oLinks.length ; i++){if (oLinks[i].href=="javascript:void(0);/*fckeditortemplink*/"){oLinks[i].href=url;return oLinks[i];};};};};FCK.CleanAndPaste=function(html){html=html.replace(/<\/?SPAN[^>]*>/gi, "");html=html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");html=html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3");html=html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");html=html.replace(/<\\?\?xml[^>]*>/gi, "");html=html.replace(/<\/?\w+:[^>]*>/gi, "");html=html.replace(/&nbsp;/, " ");var re=new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi");html=html.replace(re, "<div$2</div>");FCK.InsertHtml(html);};FCK.Preview=function(){var oWindow=window.open('', null, 'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes');oWindow.document.write(FCK.GetHTML());oWindow.document.close();};FCK.SwitchEditMode=function(){var bWYSIWYG=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);document.getElementById('eWysiwyg').style.display	= bWYSIWYG ? "none" : "";document.getElementById('eSource').style.display	= bWYSIWYG ? "" : "none";if (bWYSIWYG) document.getElementById('eSourceField').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML() : FCK.GetHTML());else FCK.SetHTML(FCK.GetHTML(), true);FCK.EditMode=bWYSIWYG ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG;FCK.Focus();FCKToolbarSet.RefreshItemsState();};
  FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(commandName){switch (commandName){case 'Unlink' : return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED;default : return FCK._BaseGetNamedCommandState(commandName);};};FCK._BaseExecuteNamedCommand=FCK.ExecuteNamedCommand;FCK.ExecuteNamedCommand=function(commandName, commandParameter){switch (commandName){case 'Print' : FCK.EditorWindow.print();break;case 'Paste' : try			{ if (FCK.Paste() ) FCK._BaseExecuteNamedCommand( 'Paste') ; }catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute pasting operations. Please use the keyboard for that (Ctrl+V).") ;};break;case 'Cut' : try			{ FCK._BaseExecuteNamedCommand('Cut') ; }catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute cutting operations. Please use the keyboard for that (Ctrl+X).") ;};break;case 'Copy' : try			{ FCK._BaseExecuteNamedCommand('Copy') ; }catch (e)	{ alert( "Your browser security settings don't permit the editor to automaticaly execute copying operations. Please use the keyboard for that (Ctrl+C).") ;};break;default : FCK._BaseExecuteNamedCommand(commandName, commandParameter);};};FCK.AttachToOnSelectionChange=function(functionPointer){this.Events.AttachEvent('OnSelectionChange', functionPointer);};FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;}else if (FCKConfig.AutoDetectPasteFromWord && FCKBrowserInfo.IsIE55OrMore){var sHTML=FCK.GetClipboardHTML();var re=/<\w[^>]* class="?MsoNormal"?/gi;if (re.test( sHTML )){if (confirm( FCKLang["PasteWordConfirm"] )){FCK.CleanAndPaste(sHTML);return false;};};}else return true;};FCK.InsertHtml=function(html){var oSel=FCKSelection.Delete();var oRange=oSel.getRangeAt(0);var oFragment=oRange.createContextualFragment(html);var oLastNode=oFragment.lastChild;oRange.insertNode(oFragment);oRange.setEndAfter(oLastNode);oRange.setStartAfter(oLastNode);oSel.removeAllRanges();oSel=FCK.EditorWindow.getSelection();oSel.addRange(oRange);this.Focus();};FCK.InsertElement=function(element){var oSel=FCKSelection.Delete();var oRange=oSel.getRangeAt(0);oRange.insertNode(element);oRange.setEndAfter(element);oRange.setStartAfter(element);this.Focus();};FCK.PasteAsPlainText=function(){FCKDialog.OpenDialog('FCKDialog_Paste', 'Paste as Plain Text', 'dialog/fck_paste.html', 400, 330, 'PlainText');};FCK.PasteFromWord=function(){FCKDialog.OpenDialog('FCKDialog_Paste', 'Paste from Word', 'dialog/fck_paste.html', 400, 330, 'Word');};FCK.GetClipboardHTML=function(){return '';};
  var FCKSelection=new Object();FCK.Selection=FCKSelection;
  FCKSelection.GetSelectedElement=function(){var oSel=FCK.EditorWindow.getSelection();if (oSel.rangeCount==1){var oRange=oSel.getRangeAt(0);if (oRange.startContainer==oRange.endContainer && (oRange.endOffset - oRange.startOffset)==1) return oSel.anchorNode.childNodes[ oSel.anchorOffset ];};};FCKSelection.MoveToNode=function(node){var oSel=FCK.EditorWindow.getSelection();for (i=oSel.rangeCount - 1 ; i >=0 ; i--){if (i==0) oSel.getRangeAt(i).selectNodeContents( node);else oSel.removeRange(oSel.getRangeAt(i));};};FCKSelection.HasAncestorNode=function(nodeTagName){var oContainer=this.GetSelectedElement();if (! oContainer && FCK.EditorWindow){try		{ oContainer=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }catch(e){};};while (oContainer){if (oContainer.tagName==nodeTagName) return true;oContainer=oContainer.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(nodeTagName){var oNode;var oContainer=this.GetSelectedElement();if (! oContainer) oContainer=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;while (oContainer){if (oContainer.tagName==nodeTagName) return oContainer;oContainer=oContainer.parentNode;};};FCKSelection.Delete=function(){var oSel=FCK.EditorWindow.getSelection();for (var i=0 ; i < oSel.rangeCount ; i++){oSel.getRangeAt(i).deleteContents();};return oSel;}
  var FCKPanel=function(){};FCKPanel.prototype.Create=function(){this.PanelDiv=window.parent.document.createElement('DIV');this.PanelDiv.style.visibility='hidden';this.PanelDiv.className='FCK_Panel';this.PanelDiv.style.zIndex=10000;this.PanelDiv.oncontextmenu=function() { return false ;};window.parent.document.body.appendChild(this.PanelDiv);if (this.CreatePanelBody) this.CreatePanelBody(window.parent.document, this.PanelDiv);this.Created=true;};FCKPanel.prototype.Show=function(panelX, panelY){if (! this.Created) this.Create();this.PanelDiv.style.left=panelX + 'px';this.PanelDiv.style.top=panelY + 'px';var oActualWindow=FCK.EditorWindow;while (oActualWindow){oActualWindow.document.addEventListener('click', this._OnDocumentClick, false);if (oActualWindow !=oActualWindow.parent) oActualWindow=oActualWindow.parent;else if (oActualWindow.opener==null) oActualWindow=oActualWindow.opener;else break;};this.PanelDiv.style.visibility='';FCK.ActivePanel=this;};FCKPanel.prototype._OnDocumentClick=function(event){if (! FCK.ActivePanel) return;var e=event.target;while (e){if (e==FCK.ActivePanel.PanelDiv) return;e=e.parentNode;};FCK.ActivePanel.Hide();};FCKPanel.prototype.Hide=function(){this.PanelDiv.style.visibility='hidden';this.PanelDiv.style.left=this.PanelDiv.style.top='1px';delete FCK.ActivePanel;}
  var FCKColorPanel=function(setColorFunction){this.SetColorFunction=setColorFunction;};FCKColorPanel.prototype=new FCKPanel;FCKColorPanel.prototype.CreatePanelBody=function(targetDocument, targetDiv){function CreateSelectionDiv(){var oDiv=targetDocument.createElement("DIV");oDiv.className='ColorDeselected';oDiv.onmouseover=function() { this.className='ColorSelected' ; };oDiv.onmouseout=function() { this.className='ColorDeselected' ; };return oDiv;};var oTable=targetDocument.createElement("TABLE");oTable.cellPadding=0;oTable.cellSpacing=0;oTable.border=0;var oDiv=CreateSelectionDiv();oDiv.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\ <tr>\ <td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\ <td nowrap width="100%" align="center" unselectable="on">Automatic</td>\ </tr>\ </table>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.SetColorFunction('');this.Panel.Hide();};var oCell=oTable.insertRow(-1).insertCell(-1);oCell.colSpan=8;oCell.appendChild(oDiv);var aColors=FCKConfig.FontColors.split(',');var iCounter=0;while (iCounter < aColors.length){var oRow=oTable.insertRow(-1);for (var i=0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++){var oDiv=CreateSelectionDiv();oDiv.Color=aColors[iCounter];oDiv.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.SetColorFunction('#' + this.Color);this.Panel.Hide();};oCell=oRow.insertCell(-1);oCell.appendChild(oDiv);};};var oDiv=CreateSelectionDiv();oDiv.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">More Colors...</td></tr></table>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color', 'Select a Color', 'dialog/fck_colorselector.html', 400, 330, this.Panel.SetColorFunction);};var oCell=oTable.insertRow(-1).insertCell(-1);oCell.colSpan=8;oCell.appendChild(oDiv);targetDiv.appendChild(oTable);}
  var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var oRow=FCKSelection.MoveToAncestorNode("TR");if (!oRow) return;var oNewRow=oRow.cloneNode(true);oRow.parentNode.insertBefore(oNewRow, oRow);FCKTableHandler.ClearRow(oRow);};FCKTableHandler.DeleteRows=function(row){if (!row) row=FCKSelection.MoveToAncestorNode("TR");if (!row) return;var oTable=FCKTools.GetElementAscensor(row, 'TABLE');if (oTable.rows.length==1){FCKTableHandler.DeleteTable(oTable);return;};row.parentNode.removeChild(row);};FCKTableHandler.DeleteTable=function(table){if (!table) table=FCKSelection.MoveToAncestorNode("TABLE");if (!table) return;table.parentNode.removeChild(table);};FCKTableHandler.InsertColumn=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oTable=FCKTools.GetElementAscensor(oCell, 'TABLE');var iIndex=oCell.cellIndex + 1;for (var i=0 ; i < oTable.rows.length ; i++){var oRow=oTable.rows[i];if (oRow.cells.length < iIndex) continue;oCell=FCK.EditorDocument.createElement('TD');oCell.innerHTML='&nbsp;';var oBaseCell=oRow.cells[iIndex];if (oBaseCell){oRow.insertBefore(oCell, oBaseCell);}else{oRow.appendChild(oCell);};};};FCKTableHandler.DeleteColumns=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oTable=FCKTools.GetElementAscensor(oCell, 'TABLE');var iIndex=oCell.cellIndex;for (var i=oTable.rows.length - 1 ; i >=0 ; i--){var oRow=oTable.rows[i];if (iIndex==0 && oRow.cells.length==1){FCKTableHandler.DeleteRows(oRow);continue;};if (oRow.cells[iIndex]) oRow.removeChild(oRow.cells[iIndex]);};};FCKTableHandler.InsertCell=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oNewCell=FCK.EditorDocument.createElement("TD");oNewCell.innerHTML="&nbsp;";if (oCell.cellIndex==oCell.parentNode.cells.lenght - 1){oCell.parentNode.appendChild(oNewCell);}else{oCell.parentNode.insertBefore(oNewCell, oCell.nextSibling);};};FCKTableHandler.DeleteCell=function(cell){if (cell.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor( cell, 'TR' ));return;};cell.parentNode.removeChild(cell);};FCKTableHandler.DeleteCells=function(){var aCells=FCKTableHandler.GetSelectedCells();for (var i=aCells.length - 1 ; i >=0  ; i--){FCKTableHandler.DeleteCell(aCells[i]);};};FCKTableHandler.MergeCells=function(){alert('Command not implemented.');};FCKTableHandler.SplitCell=function(){alert('Command not implemented.');};FCKTableHandler.ClearRow=function(tr){var aCells=tr.cells;for (var i=0 ; i < aCells.length ; i++){aCells[i].innerHTML='&nbsp;';};}
  FCKTableHandler.GetSelectedCells=function(){var aCells=new Array();var oSelection=FCK.EditorWindow.getSelection();if (oSelection.rangeCount==1 && oSelection.anchorNode.nodeType==3){var oParent=FCKTools.GetElementAscensor(oSelection.anchorNode, 'TD');if (oParent){aCells[0]=oParent;return aCells;};};for (var i=0 ; i < oSelection.rangeCount ; i++){var oRange=oSelection.getRangeAt(i);var oCell=oRange.startContainer.childNodes[ oRange.startOffset ];if (oCell.tagName=='TD') aCells[aCells.length]=oCell;};return aCells;};
  var FCKNamedCommand=function(commandName){this.Name=commandName;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
  var FCKDialogCommand=function(name, title, url, width, height, getStateFunction, getStateParam){this.Name=name;this.Title=title;this.Url=url;this.Width=width;this.Height=height;this.GetStateFunction=getStateFunction;this.GetStateParam=getStateParam;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction){return this.GetStateFunction(this.GetStateParam);}else{return FCK_TRISTATE_OFF;};};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert('Command not implemented.');};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(fontName){if (fontName==null || fontName==""){}else{FCK.ExecuteNamedCommand('FontName', fontName);};};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(fontSize){if (typeof( fontSize )=='string' ) fontSize = parseInt(fontSize);if (fontSize==null || fontSize==''){FCK.ExecuteNamedCommand('FontSize', 3);}else{FCK.ExecuteNamedCommand('FontSize', fontSize);};};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(formatName){if (formatName==null || formatName==''){FCK.ExecuteNamedCommand('FormatBlock', '<P>');}else{FCK.ExecuteNamedCommand('FormatBlock', formatName);};};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var oForm=FCK.LinkedField.form;oForm.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCK.SetHTML('');};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name="Source";};FCKSourceCommand.prototype.Execute=function(){FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON);}
  var FCKTextColorCommand=function(type){this.Name=type=='ForeColor' ? 'TextColor' : 'BGColor';this.Type=type;this._Panel=new FCKColorPanel(this.SetColor);this._Panel.Create();};FCKTextColorCommand.prototype.Execute=function(panelX, panelY){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(panelX, panelY);};FCKTextColorCommand.prototype.SetColor=function(color){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor', color);else if (FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('hilitecolor', color);else FCK.ExecuteNamedCommand('BackColor', color);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
  var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
  var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
  var FCKTableCommand=function(command){this.Name=command;};FCKTableCommand.prototype.Execute=function(){switch (this.Name){case 'TableInsertRow' : FCKTableHandler.InsertRow();break;case 'TableDeleteRows' : FCKTableHandler.DeleteRows();break;case 'TableInsertColumn' : FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns' : FCKTableHandler.DeleteColumns();break;case 'TableInsertCell' : FCKTableHandler.InsertCell();break;case 'TableDeleteCells' : FCKTableHandler.DeleteCells();break;case 'TableMergeCells' : FCKTableHandler.MergeCells();break;case 'TableSplitCell' : FCKTableHandler.SplitCell();break;default : alert('Unknown command "' + this.Name + '".');};};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
  var FCKCommands=new Object();var sNamedCommands=[ 'Cut','Copy','Paste','Print','Find','SelectAll','RemoveFormat','Unlink','Undo','Redo', 'Bold','Italic','Underline','StrikeThrough','Subscript','Superscript', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','Outdent','Indent', 'InsertOrderedList','InsertUnorderedList','InsertHorizontalRule'];for (i=0 ; i < sNamedCommands.length ; i++){FCKCommands[ sNamedCommands[i] ]=new FCKNamedCommand(sNamedCommands[i]);};FCKCommands['Link']			= new FCKDialogCommand( 'Link'			, FCKLang.DlgLnkWindowTitle, 'dialog/fck_link.html'	, 400, 330, FCK.GetNamedCommandState, 'CreateLink' );FCKCommands['About']		= new FCKDialogCommand( 'About'			, FCKLang.About, 'dialog/fck_about.html'	, 400, 330 );FCKCommands['Image']		= new FCKDialogCommand( 'Image'			, 'Image Properties', 'dialog/fck_image.html'		, 450, 400, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['Table']		= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html'		, 400, 250 );FCKCommands['TableProp']	= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html?Parent', 400, 250 );FCKCommands['SpecialChar']	= new FCKDialogCommand( 'SpecialChar'	, 'Select Character', 'dialog/fck_specialchar.html'	, 400, 300, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['Smiley']		= new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle, 'dialog/fck_smiley.html'	, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['FontName']		= new FCKFontNameCommand();FCKCommands['FontSize']		= new FCKFontSizeCommand();FCKCommands['FontFormat']	= new FCKFormatBlockCommand();FCKCommands['Source']		= new FCKSourceCommand();FCKCommands['Preview']		= new FCKPreviewCommand();FCKCommands['Save']			= new FCKSaveCommand();FCKCommands['NewPage']		= new FCKNewPageCommand();FCKCommands['TextColor']	= new FCKTextColorCommand('ForeColor');FCKCommands['BGColor']		= new FCKTextColorCommand('BackColor');FCKCommands['PasteText']	= new FCKPastePlainTextCommand();FCKCommands['PasteWord']	= new FCKPasteWordCommand();FCKCommands['TableInsertRow']		= new FCKTableCommand('TableInsertRow');FCKCommands['TableDeleteRows']		= new FCKTableCommand('TableDeleteRows');FCKCommands['TableInsertColumn']	= new FCKTableCommand('TableInsertColumn');FCKCommands['TableDeleteColumns']	= new FCKTableCommand('TableDeleteColumns');FCKCommands['TableInsertCell']		= new FCKTableCommand('TableInsertCell');FCKCommands['TableDeleteCells']		= new FCKTableCommand('TableDeleteCells');FCKCommands['TableMergeCells']		= new FCKTableCommand('TableMergeCells');FCKCommands['TableSplitCell']		= new FCKTableCommand('TableSplitCell');FCKCommands['Undefined']	= new FCKUndefinedCommand();
  var FCKToolbarButton=function(commandName, label, tooltip, style, sourceView){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ONLYICON;this.SourceView=sourceView ? true : false;this.State=FCK_UNKNOWN;};FCKToolbarButton.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;this.DOMDiv.onmouseover=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED){this.className='TB_Button_On';};};this.DOMDiv.onmouseout=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State !=FCK_TRISTATE_ON){this.className='TB_Button_Off';};};this.DOMDiv.onclick=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED) this.FCKToolbarButton.Command.Execute();return false;};var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' + '<td class="TB_Text" unselectable="on">' + this.Label + '</td>' + '</tr>' + '</table>';var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarButton.prototype.RefreshState=function(){var eState;if (FCK.EditMode==FCK_EDITMODE_SOURCE && ! this.SourceView) eState=FCK_TRISTATE_DISABLED;else eState=this.Command.GetState();if (eState==this.State) return;this.State=eState;switch (this.State){case FCK_TRISTATE_ON : this.DOMDiv.className='TB_Button_On';break;case FCK_TRISTATE_OFF : this.DOMDiv.className='TB_Button_Off';break;default : this.DOMDiv.className='TB_Button_Disabled';break;};}
  var FCKToolbarCombo=function(commandName, label, itemsValues, itemsNames, tooltip, style, firstIsBlank, itemsSeparator, sourceView){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ICONTEXT;this.SourceView=sourceView ? true : false;this.State=FCK_UNKNOWN;this.ItemsValues=itemsValues;this.ItemsNames=itemsNames ? itemsNames : itemsValues;this.ItemsSeparator=itemsSeparator ? itemsSeparator : ';';this.FirstIsBlank=firstIsBlank !=null ? firstIsBlank : true;};FCKToolbarCombo.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Combo_Off';var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Text" unselectable="on" nowrap>' + this.Label + '</td>' + '<td unselectable="on"><select title="' + this.Tooltip + '"></select></td>' + '</tr>' + '</table>';this.SelectElement=this.DOMDiv.firstChild.firstChild.firstChild.childNodes.item(1).firstChild;this.SelectElement.FCKToolbarCombo=this;this.SelectElement.onchange=function(){this.FCKToolbarCombo.Command.Execute(this.value);return false;};var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshItems();this.RefreshState();};FCKToolbarCombo.prototype.RefreshItems=function(){var aNames=FCKTools.GetResultingArray(this.ItemsNames, this.ItemsSeparator);var aValues=FCKTools.GetResultingArray(this.ItemsValues, this.ItemsSeparator);FCKTools.RemoveAllSelectOptions(this.SelectElement);if (this.FirstIsBlank) FCKTools.AddSelectOption(document, this.SelectElement, '', '');for (var i=0 ; i < aValues.length ; i++){FCKTools.AddSelectOption(document, this.SelectElement, aNames[i], aValues[i]);};};FCKToolbarCombo.prototype.RefreshState=function(){var eState;if (FCK.EditMode==FCK_EDITMODE_SOURCE && ! this.SourceView){eState=FCK_TRISTATE_DISABLED;this.SelectElement.value='';}else{var sValue=this.Command.GetState();FCKTools.SelectNoCase(this.SelectElement, sValue ? sValue : '', '');eState=sValue==null ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_ON;};if (eState==this.State) return;this.State=eState;this.DOMDiv.className=(eState==FCK_TRISTATE_ON ? 'TB_Combo_Off' : 'TB_Combo_Disabled');this.SelectElement.disabled=(eState==FCK_TRISTATE_DISABLED);};
  var FCKToolbarPanelButton=function(commandName, label, tooltip, style){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ONLYICON;this.State=FCK_UNKNOWN;if (this.Command==null) alert('Unknown command name "' + commandName + '"');};FCKToolbarPanelButton.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;this.DOMDiv.onmouseover=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED){this.className='TB_Button_On';};};this.DOMDiv.onmouseout=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State !=FCK_TRISTATE_ON){this.className='TB_Button_Off';};};this.DOMDiv.onclick=function(ev){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED) this.FCKToolbarButton.HandleOnClick(this.FCKToolbarButton, ev);if (ev) ev.stopPropagation();return false;};var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' + '<td class="TB_Text" unselectable="on">' + this.Label + '</td>' + '<td class="TB_ButtonArrow" unselectable="on"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' + '</tr>' + '</table>';var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;
  FCKToolbarPanelButton.prototype.HandleOnClick=function(panelButton, ev){var e=panelButton.DOMDiv;var oDivCoords=FCKTools.GetElementPosition(e);var oFrmCoords=FCKTools.GetElementPosition(window.frameElement);var iPanelX=oDivCoords.X + oFrmCoords.X;var iPanelY=oDivCoords.Y + oFrmCoords.Y + e.offsetHeight;panelButton.Command.Execute(iPanelX,iPanelY);}
  var FCKToolbarItems=new Object();FCKToolbarItems['Source']		= new FCKToolbarButton( 'Source', 'Source', null, FCK_TOOLBARITEM_ICONTEXT, true );FCKToolbarItems['Save']			= new FCKToolbarButton( 'Save', null, null, null, true  );FCKToolbarItems['NewPage']		= new FCKToolbarButton( 'NewPage', null, null, null, true  );FCKToolbarItems['Preview']		= new FCKToolbarButton( 'Preview', null, null, null, true  );FCKToolbarItems['About']		= new FCKToolbarButton( 'About', FCKLang.About );FCKToolbarItems['Cut']			= new FCKToolbarButton( 'Cut', FCKLang.Cut, null, null, true );FCKToolbarItems['Copy']			= new FCKToolbarButton( 'Copy', FCKLang.Copy, null, null, true );FCKToolbarItems['Paste']		= new FCKToolbarButton( 'Paste', FCKLang.Paste, null, null, true );FCKToolbarItems['PasteText']	= new FCKToolbarButton( 'PasteText', FCKLang.PasteText );FCKToolbarItems['PasteWord']	= new FCKToolbarButton( 'PasteWord', FCKLang.PasteWord );FCKToolbarItems['Print']		= new FCKToolbarButton( 'Print', null, null, null, true );FCKToolbarItems['Undo']			= new FCKToolbarButton( 'Undo', null, null, null, true );FCKToolbarItems['Redo']			= new FCKToolbarButton( 'Redo', null, null, null, true );FCKToolbarItems['Find']			= new FCKToolbarButton( 'Find', null, null, null, true );FCKToolbarItems['SelectAll']	= new FCKToolbarButton( 'SelectAll', 'Select All', null, null, true );FCKToolbarItems['RemoveFormat']	= new FCKToolbarButton( 'RemoveFormat', 'Remove Format' );FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink' );FCKToolbarItems['Bold']			= new FCKToolbarButton( 'Bold' );FCKToolbarItems['Italic']		= new FCKToolbarButton( 'Italic' );FCKToolbarItems['Underline']	= new FCKToolbarButton( 'Underline' );FCKToolbarItems['StrikeThrough']= new FCKToolbarButton( 'StrikeThrough', 'Strike Through' );FCKToolbarItems['Subscript']	= new FCKToolbarButton( 'Subscript' );FCKToolbarItems['Superscript']	= new FCKToolbarButton( 'Superscript' );FCKToolbarItems['OrderedList']	= new FCKToolbarButton( 'InsertOrderedList', 'Ordered List', 'Insert/Remove Ordered List' );FCKToolbarItems['UnorderedList']= new FCKToolbarButton( 'InsertUnorderedList', 'Unordered List', 'Insert/Remove Unordered List' );FCKToolbarItems['Outdent']		= new FCKToolbarButton( 'Outdent' );FCKToolbarItems['Indent']		= new FCKToolbarButton( 'Indent' );FCKToolbarItems['Link']			= new FCKToolbarButton( 'Link', 'Link', 'Create/Edit Link' );FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink', 'Remove Link' );FCKToolbarItems['Image']		= new FCKToolbarButton( 'Image', 'Image', 'Insert/Edit Image' );FCKToolbarItems['Table']		= new FCKToolbarButton( 'Table', 'Table', 'Create/Edit Table' );FCKToolbarItems['SpecialChar']	= new FCKToolbarButton( 'SpecialChar', 'Special Character', 'Insert Special Character' );FCKToolbarItems['Smiley']		= new FCKToolbarButton( 'Smiley', 'Smiley', 'Insert Smiley' );FCKToolbarItems['Rule']			= new FCKToolbarButton( 'InsertHorizontalRule', 'Horizontal Rule', 'Insert Horizontal Rule' );FCKToolbarItems['JustifyLeft']	= new FCKToolbarButton( 'JustifyLeft', 'Align Left' );FCKToolbarItems['JustifyCenter']= new FCKToolbarButton( 'JustifyCenter', 'Center' );FCKToolbarItems['JustifyRight']	= new FCKToolbarButton( 'JustifyRight', 'Align Right' );FCKToolbarItems['JustifyFull']	= new FCKToolbarButton( 'JustifyFull', 'Justify' );FCKToolbarItems['FontName']		= new FCKToolbarCombo( 'FontName', FCKLang['Font'], FCKConfig.FontNames, FCKConfig.FontNames );FCKToolbarItems['FontSize']		= new FCKToolbarCombo( 'FontSize', FCKLang['FontSize'], '1;2;3;4;5;6;7', 'xx-small;x-small;small;medium;large;x-large;xx-large' );FCKToolbarItems['FontFormat']	= new FCKToolbarCombo( 'FontFormat', FCKLang['FontFormat'], '<P>;<DIV>;<H1>;<H2>', 'Normal (P);Normal (DIV);Heading 1;Heading 2' );FCKToolbarItems['TextColor']	= new FCKToolbarPanelButton( 'TextColor' );FCKToolbarItems['BGColor']		= new FCKToolbarPanelButton( 'BGColor' );
  var FCKToolbar=function(){this.Items=new Array();this.DOMTable=document.createElement('table');this.DOMTable.className='TB_Toolbar';with (this.DOMTable){style.styleFloat=style.cssFloat=FCKLang.Dir=='rtl' ? 'right' : 'left';cellPadding=0;cellSpacing=0;border=0;};this.DOMRow=this.DOMTable.insertRow(-1);var oCell=this.DOMRow.insertCell(-1);oCell.className='TB_Start';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';FCKToolbarSet.DOMElement.appendChild(this.DOMTable);};FCKToolbar.prototype.AddItem=function(toolbarItem){this.Items[ this.Items.length ]=toolbarItem;toolbarItem.CreateInstance(this);};FCKToolbar.prototype.AddSeparator=function(){var oCell=this.DOMRow.insertCell(-1);oCell.unselectable='on';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};FCKToolbar.prototype.AddTerminator=function(){var oCell=this.DOMRow.insertCell(-1);oCell.className='TB_End';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};
  var FCKToolbarSet=new Object();FCKToolbarSet.Toolbars=new Array();FCKToolbarSet.Expand=function(){document.getElementById('Collapsed').style.display = 'none';document.getElementById('Expanded').style.display = '';if (! FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()", 1);};};FCKToolbarSet.Collapse=function(){document.getElementById('Collapsed').style.display = '';document.getElementById('Expanded').style.display = 'none';if (! FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()", 1);};};FCKToolbarSet.Restart=function(){if (!FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();document.getElementById('CollapseHandle').style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none';};FCKToolbarSet.Load=function(toolbarSetName){this.DOMElement=document.getElementById('eToolbar');var ToolbarSet=FCKConfig.ToolbarSets[toolbarSetName];if (! ToolbarSet){alert('Toolbar set "' + toolbarSetName + '" doesn\'t exist.');return;};this.Toolbars=new Array();for (var x=0 ; x < ToolbarSet.length ; x++){var oToolbar=new FCKToolbar();for (var j=0 ; j < ToolbarSet[x].length ; j++){var sItem=ToolbarSet[x][j];if (sItem=='-') oToolbar.AddSeparator();else{var oItem=FCKToolbarItems[sItem];if (oItem) oToolbar.AddItem(oItem);else alert('Unknown toolbar item name "' + sItem + "'");};};oToolbar.AddTerminator();this.Toolbars[ this.Toolbars.length ]=oToolbar;};this.Redraw();};FCKToolbarSet.Redraw=function(){};FCKToolbarSet.RefreshItemsState=function(){for (var i=0 ; i < FCKToolbarSet.Toolbars.length ; i++){var oToolbar=FCKToolbarSet.Toolbars[i];for (var j=0 ; j < oToolbar.Items.length ; j++){oToolbar.Items[j].RefreshState();};};};
  var FCKDialog=new Object();FCKDialog.OpenDialog=function(dialogName, dialogTitle, dialogPage, width, height, customValue){var oDialogInfo=new Object();oDialogInfo.Title=dialogTitle;oDialogInfo.Page=dialogPage;oDialogInfo.Editor=window;oDialogInfo.CustomValue=customValue;var sUrl=FCKConfig.BasePath + 'fckdialog.html';this.Show(oDialogInfo, dialogName, sUrl, width, height);};
  FCKDialog.Show=function(dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight){var iTop=(screen.height - dialogHeight) / 2;var iLeft=(screen.width  - dialogWidth)  / 2;var sOption="location=no,menubar=no,resizable=no,toolbar=no,dependent=yes" + ",width="  + dialogWidth + ",height=" + dialogHeight + ",top="  + iTop + ",left=" + iLeft;var oWindow=window.open('', 'FCKEditorDialog', sOption, true);oWindow.moveTo(iLeft, iTop);oWindow.resizeTo(dialogWidth, dialogHeight);oWindow.focus();oWindow.location.href=pageUrl;oWindow.dialogArguments=dialogInfo;this.Window=oWindow;window.top.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);window.top.parent.addEventListener('mousedown', this.CheckFocus, true);window.top.parent.addEventListener('mouseup', this.CheckFocus, true);window.top.parent.addEventListener('click', this.CheckFocus, true);window.top.parent.addEventListener('focus', this.CheckFocus, true);};FCKDialog.CheckFocus=function(){if (FCKDialog.Window && !FCKDialog.Window.closed){FCKDialog.Window.focus();return false;}else{window.top.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);window.top.parent.removeEventListener('onmousedown', FCKDialog.CheckFocus, true);window.top.parent.removeEventListener('mouseup', FCKDialog.CheckFocus, true);window.top.parent.removeEventListener('click', FCKDialog.CheckFocus, true);window.top.parent.removeEventListener('onfocus', FCKDialog.CheckFocus, true);};};
  var FCKContextMenuItem=function(contextMenu, commandName, label, hasIcon){this.ContextMenu=contextMenu;this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.HasIcon=hasIcon ? true : false;};FCKContextMenuItem.prototype.CreateTableRow=function(targetTable){this._Row=targetTable.insertRow(-1);this._Row.className='CM_Disabled';this._Row.FCKContextMenuItem=this;this._Row.onmouseover=function(){if (this.className !='CM_Disabled') this.className='CM_Over';};this._Row.onmouseout=function(){if (this.className !='CM_Disabled') this.className='CM_Option';};this._Row.onclick=function(){this.FCKContextMenuItem.ContextMenu.Hide();this.FCKContextMenuItem.Command.Execute();return false;};var oCell=this._Row.insertCell(-1);oCell.className='CM_Icon';if (this.HasIcon ) oCell.innerHTML='<img alt="" src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="20" unselectable="on">';oCell=this._Row.insertCell(-1);oCell.className='CM_Label';oCell.unselectable='on';oCell.noWrap=true;oCell.innerHTML=this.Label;};FCKContextMenuItem.prototype.SetVisible=function(isVisible){this._Row.style.display=isVisible ? '' : 'none';};FCKContextMenuItem.prototype.RefreshState=function(){switch (this.Command.GetState()){case FCK_TRISTATE_ON : case FCK_TRISTATE_OFF : this._Row.className='CM_Option';break;default : this._Row.className='CM_Disabled';break;};};
  var FCKContextMenuSeparator=function(){};FCKContextMenuSeparator.prototype.CreateTableRow=function(targetTable){this._Row=targetTable.insertRow(-1);this._Row.className='CM_Separator';var oCell=this._Row.insertCell(-1);oCell.className='CM_Icon';oCell=this._Row.insertCell(-1);oCell.className='CM_Label';oCell.innerHTML='<div></div>';};FCKContextMenuSeparator.prototype.SetVisible=function(isVisible){this._Row.style.display=isVisible ? '' : 'none';};FCKContextMenuSeparator.prototype.RefreshState=function(){};
  var FCKContextMenuGroup=function(){this.IsVisible=true;this.Items=new Array();this.ValidationFunction=null;};FCKContextMenuGroup.prototype.Add=function(contextMenuItem){this.Items[ this.Items.length ]=contextMenuItem;};FCKContextMenuGroup.prototype.CreateTableRows=function(table){for (var i=0 ; i < this.Items.length ; i++){this.Items[i].CreateTableRow(table);};};FCKContextMenuGroup.prototype.SetVisible=function(isVisible){for (var i=0 ; i < this.Items.length ; i++){this.Items[i].SetVisible(isVisible);};this.IsVisible=isVisible;};FCKContextMenuGroup.prototype.RefreshState=function(){if (! this.IsVisible) return;for (var i=0 ; i < this.Items.length ; i++){this.Items[i].RefreshState();};}
  var FCKContextMenu=new Object();FCKContextMenu._IsLoaded=false;FCKContextMenu.Reload=function(){this._Div=this._Document.createElement('DIV');this._Div.className='CM_ContextMenu';this._Div.style.position='absolute';this._Div.style.visibility='hidden';this._Document.body.appendChild(this._Div);var oTable=this._Document.createElement('TABLE');oTable.cellSpacing=0;oTable.cellPadding=0;oTable.border=0;this._Div.appendChild(oTable);this.Groups=new Object();this.Groups['Generic'] = new FCKContextMenuGroup();with (this.Groups['Generic']){Add(new FCKContextMenuItem( this, 'Cut'	, FCKLang['Cut']	, true ));Add(new FCKContextMenuItem( this, 'Copy'	, FCKLang['Copy']	, true ));Add(new FCKContextMenuItem( this, 'Paste'	, FCKLang['Paste']	, true ));};this.Groups['Link'] = new FCKContextMenuGroup();with (this.Groups['Link']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Link'	, FCKLang['EditLink']	, true ));Add(new FCKContextMenuItem( this, 'Unlink'	, FCKLang['RemoveLink']	, true ));};this.Groups['TableCell'] = new FCKContextMenuGroup();with (this.Groups['TableCell']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertRow', FCKLang["InsertRow"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteRows', FCKLang["DeleteRows"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertColumn', FCKLang["InsertColumn"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteColumns', FCKLang["DeleteColumns"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertCell', FCKLang["InsertCell"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteCells', FCKLang["DeleteCells"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableProp', FCKLang["TableProperties"], true ));};this.Groups['Table'] = new FCKContextMenuGroup();with (this.Groups['Table']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Table', FCKLang["TableProperties"], true ));};this.Groups['Image'] = new FCKContextMenuGroup();with (this.Groups['Image']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Image', FCKLang["ImageProperties"], true ));};this.Groups['Select'] = new FCKContextMenuGroup();with (this.Groups['Select']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Undefined', "Selection Field Properties" ));};this.Groups['Textarea'] = new FCKContextMenuGroup();with (this.Groups['Textarea']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Undefined', "Textarea Properties" ));};for (var o in this.Groups){this.Groups[o].CreateTableRows(oTable);};this._IsLoaded=true;};FCKContextMenu.RefreshState=function(){var oTag=FCKSelection.GetSelectedElement();var sTagName;if (oTag){sTagName=oTag.tagName;};this.Groups['Link'].SetVisible( FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED );this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' && FCKSelection.HasAncestorNode('TABLE') );this.Groups['Table'].SetVisible( sTagName == 'TABLE' );this.Groups['Image'].SetVisible( sTagName == 'IMG' );this.Groups['Select'].SetVisible( sTagName == 'SELECT' );this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' );for (var o in this.Groups){this.Groups[o].RefreshState();};};
  FCKTools.AppendStyleSheet(window.parent.document, FCKConfig.SkinPath + 'fck_contextmenu.css');FCKContextMenu.Show=function(x, y){if (! this._Document){this._Document=window.parent.document;};if (!this._IsLoaded){this.Reload();this._Div.style.zIndex=10000;this._Div.oncontextmenu=function() { return false ;};};this.RefreshState();var oCoordsA=FCKTools.GetElementPosition(FCK.EditorWindow.frameElement);var oCoordsB=FCKTools.GetElementPosition(window.frameElement);x +=oCoordsA.X + oCoordsB.X;y +=oCoordsA.Y + oCoordsB.Y;var iXSpace=x + this._Div.offsetWidth - this._Div.ownerDocument.defaultView.innerWidth;var iYSpace=y + this._Div.offsetHeight - this._Div.ownerDocument.defaultView.innerHeight;if (iXSpace > 0) x -=this._Div.offsetWidth;if (iYSpace > 0) y -=this._Div.offsetHeight;this._Div.style.left=x + 'px';this._Div.style.top=y + 'px';var oActualWindow=FCK.EditorWindow;while (oActualWindow){oActualWindow.document.addEventListener('click', FCKContextMenu._OnDocumentClick, false);if (oActualWindow !=oActualWindow.parent) oActualWindow=oActualWindow.parent;else if (oActualWindow.opener==null) oActualWindow=oActualWindow.opener;else break;};this._Div.style.visibility='';};FCKContextMenu._OnDocumentClick=function(event){var e=event.target;while (e){if (e==FCKContextMenu._Div) return;e=e.parentNode;};FCKContextMenu.Hide();};FCKContextMenu.Hide=function(){this._Div.style.visibility='hidden';this._Div.style.left=this._Div.style.top='1px';}
  if (FCKConfig.ForcePasteAsPlainText) FCK.Events.AttachEvent("OnPaste", FCK.Paste);FCKToolbarSet.Name=FCKURLParams['Toolbar'] || 'Default';FCKToolbarSet.Load(FCKToolbarSet.Name);FCKToolbarSet.Restart();FCK.AttachToOnSelectionChange(FCKToolbarSet.RefreshItemsState);FCK.Config=FCKConfig;FCK.ToolbarSet=FCKToolbarSet;FCK.SetStatus(FCK_STATUS_COMPLETE);if (typeof( window.parent.FCKeditor_OnComplete )=='function') window.parent.FCKeditor_OnComplete(FCK);
  
  
  
  1.1                  siminweb/util/fckeditor/editor/js/fckeditorcode_ie_1.js
  
  Index: fckeditorcode_ie_1.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * This file has been compacted for best loading performance.
   * 
   * Version: 2.0 Beta 2
   * Created: 2004-09-10 02:40:05
   */
  var FCKDebug=new Object();if (FCKConfig.Debug){FCKDebug.Output=function(message, color){if (! FCKConfig.Debug) return;if (message !=null && isNaN( message )){message=message.replace(/</g, "&lt;");};if (!this.DebugWindow || this.DebugWindow.closed){this.DebugWindow=window.open('fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true);};if (this.DebugWindow.Output){this.DebugWindow.Output(message, color);};};}else{FCKDebug.Output=function() {};};
  var FCKTools=new Object();FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.SetLinkedFieldValue=function(value){FCK.LinkedField.value=value;};FCKTools.AttachToLinkedFieldFormSubmit=function(functionPointer){var oForm=FCK.LinkedField.form;if (!oForm) return;if (FCKBrowserInfo.IsIE) oForm.attachEvent("onsubmit", functionPointer);else oForm.addEventListener('submit', functionPointer, true);if (! oForm.updateFCKEditor) oForm.updateFCKEditor=new Array();oForm.updateFCKEditor[oForm.updateFCKEditor.length]=functionPointer;if (! oForm.originalSubmit){oForm.originalSubmit=oForm.submit;oForm.submit=function(){if (this.updateFCKEditor){for (var i=0 ; i < this.updateFCKEditor.length ; i++) this.updateFCKEditor[i]();};this.originalSubmit();};};};FCKTools.AddSelectOption=function(targetDocument, selectElement, optionText, optionValue){var oOption=targetDocument.createElement("OPTION");oOption.text=optionText;oOption.value=optionValue;selectElement.options.add(oOption);return oOption;};FCKTools.RemoveAllSelectOptions=function(selectElement){for (var i=selectElement.options.length - 1 ; i >=0 ; i--){selectElement.options.remove(i);};};FCKTools.SelectNoCase=function(selectElement, value, defaultValue){var sNoCaseValue=value.toString().toLowerCase();for (var i=0 ; i < selectElement.options.length ; i++){if (sNoCaseValue==selectElement.options[i].value.toLowerCase()){selectElement.selectedIndex=i;return;};};if (defaultValue !=null ) FCKTools.SelectNoCase( selectElement, defaultValue);};FCKTools.HTMLEncode=function(text){text=text.replace(/&/g, "&amp;");text=text.replace(/"/g, "&quot;");text=text.replace(/</g, "&lt;");text=text.replace(/>/g, "&gt;");text=text.replace(/'/g, "&#146;");return text;};FCKTools.GetResultingArray=function(arraySource, separator){switch (typeof( arraySource )){case "string" : return arraySource.split(separator);case "function" : return separator();default : if (isArray( arraySource )) return arraySource;else return new Array();};};FCKTools.GetElementPosition=function(el){var c={ X:0, Y:0 };while (el){c.X +=el.offsetLeft;c.Y +=el.offsetTop;el=el.offsetParent;};return c;};FCKTools.GetElementAscensor=function(element, ascensorTagName){var e=element.parentNode;while (e){if (e.nodeName==ascensorTagName) return e;e=e.parentNode;};};
  FCKTools.AppendStyleSheet=function(documentElement, cssFileUrl){documentElement.createStyleSheet(cssFileUrl);};FCKTools.ClearElementAttributes=function(element){element.clearAttributes();};FCKTools.GetAllChildrenIds=function(parentElement){var aIds=new Array();for (var i=0 ; i < parentElement.all.length ; i++){var sId=parentElement.all[i].id;if (sId && sId.length > 0) aIds[ aIds.length ]=sId;};return aIds;}
  var FCKLanguageManager=new Object();FCKLanguageManager.AvailableLanguages={'ar'	: 'Arabic', 'en'	: 'English', 'it'	: 'Italian'};FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){var sUserLang=navigator.language ? navigator.language.toLowerCase() : navigator.userLanguage.toLowerCase();FCKDebug.Output('Navigator Language = ' + sUserLang);if (sUserLang.length >=5){sUserLang=sUserLang.substr(0,5);if (this.AvailableLanguages[sUserLang]) return sUserLang;};if (sUserLang.length >=2){sUserLang=sUserLang.substr(0,2);if (this.AvailableLanguages[sUserLang]) return sUserLang;};};return FCKConfig.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(targetDocument, tag, propertyToSet){var aInputs=targetDocument.getElementsByTagName(tag);for (var i=0 ; i < aInputs.length ; i++){if (aInputs[i].attributes['fckLang']){var s=FCKLang[ aInputs[i].attributes["fckLang"].value ];eval('aInputs[i].' + propertyToSet + ' = s');};};};FCKLanguageManager.TranslatePage=function(targetDocument){this.TranslateElements(targetDocument, 'INPUT', 'value');this.TranslateElements(targetDocument, 'SPAN', 'innerHTML');this.TranslateElements(targetDocument, 'OPTION', 'innerHTML');};FCKLanguageManager.ActiveLanguage=new Object();FCKLanguageManager.ActiveLanguage.Code=FCKLanguageManager.GetActiveLanguage();FCKLanguageManager.ActiveLanguage.Name=FCKLanguageManager.AvailableLanguages[ FCKLanguageManager.ActiveLanguage.Code ];FCK.Language=FCKLanguageManager;LoadLanguageFile();
  var FCKEvents=function(eventsOwner){this.Owner=eventsOwner;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(eventName, functionPointer, params){if (! this.RegisteredEvents[ eventName ] ) this.RegisteredEvents[ eventName ]=new Array();this.RegisteredEvents[ eventName ][ this.RegisteredEvents[ eventName ].length ]=functionPointer;};FCKEvents.prototype.FireEvent=function(eventName, params){var bReturnValue=true;FCKDebug.Output('Firing event: ' + eventName, 'Fuchsia');var oCalls=this.RegisteredEvents[ eventName ];if (oCalls){for (i in oCalls){if (typeof( oCalls[ i ] )=="function"){bReturnValue=(bReturnValue && oCalls[ i ]( params ));}else{bReturnValue=(bReturnValue && eval( oCalls[ i ] ));};};};return bReturnValue;};
  var FCKXHtml=new Object();FCKXHtml.GetXHTML=function(node){if (window.ActiveXObject) this.XML=new ActiveXObject('Msxml2.DOMDocument');else this.XML=document.implementation.createDocument('', '', null);this.MainNode=this.XML.appendChild(this.XML.createElement( 'XHTML' ));this._AppendChildNodes(this.MainNode, node);var sXHTML=document.all ? this.MainNode.xml : FCKXHtml._GetGeckoNodeXml(this.MainNode);return sXHTML.substr(7, sXHTML.length - 15);};FCKXHtml._GetGeckoNodeXml=function(node){var oSerializer=new XMLSerializer();return oSerializer.serializeToString(node);};FCKXHtml._AppendAttribute=function(xmlNode, attributeName, attributeValue){if (attributeName=='_moz_dirty') return;var oXmlAtt=this.XML.createAttribute(attributeName);if (typeof( attributeValue )=='boolean' && attributeValue == true) oXmlAtt.value=attributeName;else oXmlAtt.value=attributeValue;xmlNode.attributes.setNamedItem(oXmlAtt);};FCKXHtml._AppendChildNodes=function(xmlNode, htmlNode){var oChildren=htmlNode.childNodes;var i=0;while (i < oChildren.length){i +=this._AppendNode(xmlNode, oChildren[i]);};};FCKXHtml._AppendNode=function(xmlNode, htmlNode){var iAddedNodes=1;switch (htmlNode.nodeType){case 1 : var sNodeName=htmlNode.nodeName.toLowerCase();var oNode=xmlNode.appendChild(this.XML.createElement( sNodeName ));var oAttributes=htmlNode.attributes;for (var n=0 ; n < oAttributes.length ; n++){var oAttribute=oAttributes[n];if (oAttribute.specified){var sAttName=oAttribute.nodeName.toLowerCase();var sAttValue=oAttribute.nodeValue;if (sAttName=='style' && document.all) sAttValue=htmlNode.style.cssText;this._AppendAttribute(oNode, sAttName, sAttValue);};};switch (sNodeName){case "script" : case "style" : oNode.appendChild(this.XML.createCDATASection( htmlNode.text ));break;case "abbr" : if (document.all){var oNextNode=htmlNode.nextSibling;while (true){iAddedNodes++;if (oNextNode && oNextNode.nodeName !='/ABBR'){this._AppendNode(oNode, oNextNode);oNextNode=oNextNode.nextSibling;}else break;};break;};case "area" : if (document.all && ! oNode.attributes.getNamedItem( 'coords' )){var sCoords=htmlNode.getAttribute('coords', 2);if (sCoords && sCoords !='0,0,0') this._AppendAttribute(oNode, 'coords', sCoords);};case "img" : if (! oNode.attributes.getNamedItem( 'alt' )) this._AppendAttribute(oNode, 'alt', '');default : this._AppendChildNodes(oNode, htmlNode);break;};break;case 3 : xmlNode.appendChild(this.XML.createTextNode( htmlNode.nodeValue ));break;default : xmlNode.appendChild(this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ));break;};return iAddedNodes;};
  FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.SetStatus=function(newStatus){this.Status=newStatus;if (newStatus==FCK_STATUS_ACTIVE){if (FCKConfig.StartupFocus) FCK.Focus();if (FCKBrowserInfo.IsIE) FCKScriptLoader.AddScript('js/fckeditorcode_ie_2.js');else FCKScriptLoader.AddScript('js/fckeditorcode_gecko_2.js');};this.Events.FireEvent('OnStatusChange', newStatus);if (this.OnStatusChange ) this.OnStatusChange( newStatus);};FCK.SetHTML=function(html, forceWYSIWYG){if (forceWYSIWYG || FCK.EditMode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsGecko) FCK.EditorDocument.designMode="off";this.EditorDocument.body.innerHTML=html;if (FCKBrowserInfo.IsGecko){FCK.EditorDocument.designMode="on";FCK.EditorDocument.execCommand("useCSS", false, !FCKConfig.GeckoUseSPAN);};}else document.getElementById('eSourceField').value = html;};FCK.GetHTML=function(){if (FCK.EditMode==FCK_EDITMODE_WYSIWYG) return this.EditorDocument.body.innerHTML;else return document.getElementById('eSourceField').value;};FCK.GetXHTML=function(){var bSource=(FCK.EditMode==FCK_EDITMODE_SOURCE);if (bSource) this.SwitchEditMode();var sXHTML=FCKXHtml.GetXHTML(this.EditorDocument.body);if (bSource) this.SwitchEditMode();return sXHTML;};FCK.UpdateLinkedField=function(){if (FCKConfig.EnableXHTML) FCKTools.SetLinkedFieldValue(FCK.GetXHTML());else FCKTools.SetLinkedFieldValue(FCK.GetHTML());};FCK.ShowContextMenu=function(x, y){if (this.Status !=FCK_STATUS_COMPLETE) return;FCKContextMenu.Show(x, y);this.Events.FireEvent("OnContextMenu");};
  FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK.StartEditor=function(){this.EditorWindow=window.frames[ 'eEditorArea' ];this.EditorDocument=this.EditorWindow.document;this.SetHTML(FCKTools.GetLinkedFieldValue());FCKTools.AttachToLinkedFieldFormSubmit(this.UpdateLinkedField);this.EditorDocument.onmousedown=this.EditorDocument.onmouseup=function(){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;};this.EditorDocument.body.onpaste=function(){if (FCK.Status==FCK_STATUS_COMPLETE) return FCK.Events.FireEvent("OnPaste");else return false;};this.EditorDocument.oncontextmenu=function(){var e=this.parentWindow.event;FCK.ShowContextMenu(e.screenX, e.screenY);return false;};this.EditorDocument.onselectionchange=function(){FCK.Events.FireEvent("OnSelectionChange");};this.EditorDocument.body.contentEditable=true;this.SetStatus(FCK_STATUS_ACTIVE);};FCK.Focus=function(){if (FCK.EditMode==FCK_EDITMODE_WYSIWYG) FCK.EditorDocument.body.focus();else document.getElementById('eSource').focus();};
  
  
  
  1.1                  siminweb/util/fckeditor/editor/js/fckeditorcode_ie_2.js
  
  Index: fckeditorcode_ie_2.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * This file has been compacted for best loading performance.
   * 
   * Version: 2.0 Beta 2
   * Created: 2004-09-10 02:40:06
   */
  FCK.ExecuteNamedCommand=function(commandName, commandParameter){FCK.Focus();FCK.EditorDocument.execCommand(commandName, false, commandParameter);FCK.Events.FireEvent('OnSelectionChange');};FCK.GetNamedCommandState=function(commandName){try{if (!FCK.EditorDocument.queryCommandEnabled( commandName )) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(commandName) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;};};FCK.GetNamedCommandValue=function(commandName){var sValue='';var eState=FCK.GetNamedCommandState(commandName);if (eState==FCK_TRISTATE_DISABLED) return null;try{sValue=this.EditorDocument.queryCommandValue(commandName);}catch(e) {};return sValue ? sValue : '';};FCK.CreateLink=function(url){if (url.length==0) FCK.ExecuteNamedCommand('Unlink');else{FCK.ExecuteNamedCommand('CreateLink', "javascript:void(0);/*fckeditortemplink*/");var oLinks=this.EditorDocument.links;for (i=0 ; i < oLinks.length ; i++){if (oLinks[i].href=="javascript:void(0);/*fckeditortemplink*/"){oLinks[i].href=url;return oLinks[i];};};};};FCK.CleanAndPaste=function(html){html=html.replace(/<\/?SPAN[^>]*>/gi, "");html=html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");html=html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3");html=html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");html=html.replace(/<\\?\?xml[^>]*>/gi, "");html=html.replace(/<\/?\w+:[^>]*>/gi, "");html=html.replace(/&nbsp;/, " ");var re=new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi");html=html.replace(re, "<div$2</div>");FCK.InsertHtml(html);};FCK.Preview=function(){var oWindow=window.open('', null, 'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes');oWindow.document.write(FCK.GetHTML());oWindow.document.close();};FCK.SwitchEditMode=function(){var bWYSIWYG=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);document.getElementById('eWysiwyg').style.display	= bWYSIWYG ? "none" : "";document.getElementById('eSource').style.display	= bWYSIWYG ? "" : "none";if (bWYSIWYG) document.getElementById('eSourceField').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML() : FCK.GetHTML());else FCK.SetHTML(FCK.GetHTML(), true);FCK.EditMode=bWYSIWYG ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG;FCK.Focus();FCKToolbarSet.RefreshItemsState();};
  FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;}else if (FCKConfig.AutoDetectPasteFromWord && FCKBrowserInfo.IsIE55OrMore){var sHTML=FCK.GetClipboardHTML();var re=/<\w[^>]* class="?MsoNormal"?/gi;if (re.test( sHTML )){if (confirm( FCKLang["PasteWordConfirm"] )){FCK.CleanAndPaste(sHTML);return false;};};}else return true;};FCK.PasteAsPlainText=function(){var sText=FCKTools.HTMLEncode(clipboardData.getData("Text"));sText=sText.replace(/\n/g, '<BR>');this.InsertHtml(sText);};FCK.PasteFromWord=function(){FCK.CleanAndPaste(FCK.GetClipboardHTML());};FCK.InsertHtml=function(html){FCK.Focus();var oSel=FCKSelection.Delete();oSel.createRange().pasteHTML( html);};FCK.InsertElement=function(element){FCK.InsertHtml(element.outerHTML);};FCK.GetClipboardHTML=function(){var oDiv=document.getElementById('___FCKHiddenDiv');if (!oDiv){var oDiv=document.createElement('DIV');oDiv.id='___FCKHiddenDiv';oDiv.style.visibility='hidden';oDiv.style.overflow='hidden';oDiv.style.position='absolute';oDiv.style.width=1;oDiv.style.height=1;document.body.appendChild(oDiv);};oDiv.innerHTML='';var oTextRange=document.body.createTextRange();oTextRange.moveToElementText(oDiv);oTextRange.execCommand('Paste');var sData=oDiv.innerHTML;oDiv.innerHTML='';return sData;};FCK.AttachToOnSelectionChange=function(functionPointer){FCK.EditorDocument.attachEvent('onselectionchange', functionPointer);};
  var FCKSelection=new Object();FCK.Selection=FCKSelection;
  FCKSelection.GetSelectedElement=function(){var oRange=FCK.EditorDocument.selection.createRange();if (FCK.EditorDocument.selection.type !='Text' && oRange.length == 1){return oRange.item(0);};};FCKSelection.MoveToNode=function(node){FCK.EditorDocument.selection.empty();var oRange=FCK.EditorDocument.selection.createRange();oRange.moveToElementText(node);oRange.select();};FCKSelection.HasAncestorNode=function(nodeTagName){var oContainer;if (FCK.EditorDocument.selection.type=="Control"){oContainer=this.GetSelectedElement();}else{var oRange=FCK.EditorDocument.selection.createRange();oContainer=oRange.parentElement();};while (oContainer){if (oContainer.tagName==nodeTagName) return true;oContainer=oContainer.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(nodeTagName){var oNode;if (FCK.EditorDocument.selection.type=="Control"){var oRange=FCK.EditorDocument.selection.createRange();for (i=0 ; i < oRange.length ; i++){if (oRange(i).parentNode){oNode=oRange(i).parentNode;break;};};}else{var oRange=FCK.EditorDocument.selection.createRange();oNode=oRange.parentElement();};while (oNode && oNode.nodeName !=nodeTagName) oNode=oNode.parentNode;return oNode;};FCKSelection.Delete=function(){var oSel=FCK.EditorDocument.selection;if (oSel.type.toLowerCase() !="none"){oSel.clear();};return oSel;}
  var FCKPanel=function(){};FCKPanel.prototype.Create=function(){this._Popup=window.createPopup();this._Popup.document.createStyleSheet(FCKConfig.SkinPath + 'fck_contextmenu.css');this._Popup.document.oncontextmenu=function() { return false ;};this.PanelDiv=this._Popup.document.createElement('DIV');this.PanelDiv.className='FCK_Panel';this._Popup.document.body.appendChild(this.PanelDiv);if (this.CreatePanelBody) this.CreatePanelBody(this._Popup.document, this.PanelDiv);this._Popup.document.close();this.Created=true;};FCKPanel.prototype.Show=function(panelX, panelY){if (! this.Created) this.Create();this._Popup.show(panelX, panelY, 0, 0);this._Popup.show(panelX, panelY, this.PanelDiv.offsetWidth, this.PanelDiv.offsetHeight);};FCKPanel.prototype.Hide=function(){if (this._Popup) this._Popup.hide();}
  var FCKColorPanel=function(setColorFunction){this.SetColorFunction=setColorFunction;};FCKColorPanel.prototype=new FCKPanel;FCKColorPanel.prototype.CreatePanelBody=function(targetDocument, targetDiv){function CreateSelectionDiv(){var oDiv=targetDocument.createElement("DIV");oDiv.className='ColorDeselected';oDiv.onmouseover=function() { this.className='ColorSelected' ; };oDiv.onmouseout=function() { this.className='ColorDeselected' ; };return oDiv;};var oTable=targetDocument.createElement("TABLE");oTable.cellPadding=0;oTable.cellSpacing=0;oTable.border=0;var oDiv=CreateSelectionDiv();oDiv.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\ <tr>\ <td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\ <td nowrap width="100%" align="center" unselectable="on">Automatic</td>\ </tr>\ </table>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.SetColorFunction('');this.Panel.Hide();};var oCell=oTable.insertRow(-1).insertCell(-1);oCell.colSpan=8;oCell.appendChild(oDiv);var aColors=FCKConfig.FontColors.split(',');var iCounter=0;while (iCounter < aColors.length){var oRow=oTable.insertRow(-1);for (var i=0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++){var oDiv=CreateSelectionDiv();oDiv.Color=aColors[iCounter];oDiv.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.SetColorFunction('#' + this.Color);this.Panel.Hide();};oCell=oRow.insertCell(-1);oCell.appendChild(oDiv);};};var oDiv=CreateSelectionDiv();oDiv.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">More Colors...</td></tr></table>';oDiv.Panel=this;oDiv.onclick=function(){this.className='ColorDeselected';this.Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color', 'Select a Color', 'dialog/fck_colorselector.html', 400, 330, this.Panel.SetColorFunction);};var oCell=oTable.insertRow(-1).insertCell(-1);oCell.colSpan=8;oCell.appendChild(oDiv);targetDiv.appendChild(oTable);}
  var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var oRow=FCKSelection.MoveToAncestorNode("TR");if (!oRow) return;var oNewRow=oRow.cloneNode(true);oRow.parentNode.insertBefore(oNewRow, oRow);FCKTableHandler.ClearRow(oRow);};FCKTableHandler.DeleteRows=function(row){if (!row) row=FCKSelection.MoveToAncestorNode("TR");if (!row) return;var oTable=FCKTools.GetElementAscensor(row, 'TABLE');if (oTable.rows.length==1){FCKTableHandler.DeleteTable(oTable);return;};row.parentNode.removeChild(row);};FCKTableHandler.DeleteTable=function(table){if (!table) table=FCKSelection.MoveToAncestorNode("TABLE");if (!table) return;table.parentNode.removeChild(table);};FCKTableHandler.InsertColumn=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oTable=FCKTools.GetElementAscensor(oCell, 'TABLE');var iIndex=oCell.cellIndex + 1;for (var i=0 ; i < oTable.rows.length ; i++){var oRow=oTable.rows[i];if (oRow.cells.length < iIndex) continue;oCell=FCK.EditorDocument.createElement('TD');oCell.innerHTML='&nbsp;';var oBaseCell=oRow.cells[iIndex];if (oBaseCell){oRow.insertBefore(oCell, oBaseCell);}else{oRow.appendChild(oCell);};};};FCKTableHandler.DeleteColumns=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oTable=FCKTools.GetElementAscensor(oCell, 'TABLE');var iIndex=oCell.cellIndex;for (var i=oTable.rows.length - 1 ; i >=0 ; i--){var oRow=oTable.rows[i];if (iIndex==0 && oRow.cells.length==1){FCKTableHandler.DeleteRows(oRow);continue;};if (oRow.cells[iIndex]) oRow.removeChild(oRow.cells[iIndex]);};};FCKTableHandler.InsertCell=function(){var oCell=FCKSelection.MoveToAncestorNode("TD");if (!oCell) return;var oNewCell=FCK.EditorDocument.createElement("TD");oNewCell.innerHTML="&nbsp;";if (oCell.cellIndex==oCell.parentNode.cells.lenght - 1){oCell.parentNode.appendChild(oNewCell);}else{oCell.parentNode.insertBefore(oNewCell, oCell.nextSibling);};};FCKTableHandler.DeleteCell=function(cell){if (cell.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor( cell, 'TR' ));return;};cell.parentNode.removeChild(cell);};FCKTableHandler.DeleteCells=function(){var aCells=FCKTableHandler.GetSelectedCells();for (var i=aCells.length - 1 ; i >=0  ; i--){FCKTableHandler.DeleteCell(aCells[i]);};};FCKTableHandler.MergeCells=function(){alert('Command not implemented.');};FCKTableHandler.SplitCell=function(){alert('Command not implemented.');};FCKTableHandler.ClearRow=function(tr){var aCells=tr.cells;for (var i=0 ; i < aCells.length ; i++){aCells[i].innerHTML='&nbsp;';};}
  FCKTableHandler.GetSelectedCells=function(){var aCells=new Array();var oRange=FCK.EditorDocument.selection.createRange();var oParent=oRange.parentElement();if (oParent && oParent.tagName=="TD") aCells[0]=oParent;else{var oParent=FCKSelection.MoveToAncestorNode("TABLE");if (oParent){for (var i=0 ; i < oParent.cells.length ; i++){var oCellRange=FCK.EditorDocument.selection.createRange();oCellRange.moveToElementText(oParent.cells[i]);if (oRange.inRange( oCellRange) || (oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('StartToEnd',oCellRange) <= 0) || (oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&  oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 )){aCells[aCells.length]=oParent.cells[i];};};};};return aCells;};
  var FCKNamedCommand=function(commandName){this.Name=commandName;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);};
  var FCKDialogCommand=function(name, title, url, width, height, getStateFunction, getStateParam){this.Name=name;this.Title=title;this.Url=url;this.Width=width;this.Height=height;this.GetStateFunction=getStateFunction;this.GetStateParam=getStateParam;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction){return this.GetStateFunction(this.GetStateParam);}else{return FCK_TRISTATE_OFF;};};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert('Command not implemented.');};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(fontName){if (fontName==null || fontName==""){}else{FCK.ExecuteNamedCommand('FontName', fontName);};};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(fontSize){if (typeof( fontSize )=='string' ) fontSize = parseInt(fontSize);if (fontSize==null || fontSize==''){FCK.ExecuteNamedCommand('FontSize', 3);}else{FCK.ExecuteNamedCommand('FontSize', fontSize);};};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(formatName){if (formatName==null || formatName==''){FCK.ExecuteNamedCommand('FormatBlock', '<P>');}else{FCK.ExecuteNamedCommand('FormatBlock', formatName);};};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var oForm=FCK.LinkedField.form;oForm.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCK.SetHTML('');};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name="Source";};FCKSourceCommand.prototype.Execute=function(){FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON);}
  var FCKTextColorCommand=function(type){this.Name=type=='ForeColor' ? 'TextColor' : 'BGColor';this.Type=type;this._Panel=new FCKColorPanel(this.SetColor);this._Panel.Create();};FCKTextColorCommand.prototype.Execute=function(panelX, panelY){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(panelX, panelY);};FCKTextColorCommand.prototype.SetColor=function(color){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor', color);else if (FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('hilitecolor', color);else FCK.ExecuteNamedCommand('BackColor', color);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
  var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
  var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');};
  var FCKTableCommand=function(command){this.Name=command;};FCKTableCommand.prototype.Execute=function(){switch (this.Name){case 'TableInsertRow' : FCKTableHandler.InsertRow();break;case 'TableDeleteRows' : FCKTableHandler.DeleteRows();break;case 'TableInsertColumn' : FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns' : FCKTableHandler.DeleteColumns();break;case 'TableInsertCell' : FCKTableHandler.InsertCell();break;case 'TableDeleteCells' : FCKTableHandler.DeleteCells();break;case 'TableMergeCells' : FCKTableHandler.MergeCells();break;case 'TableSplitCell' : FCKTableHandler.SplitCell();break;default : alert('Unknown command "' + this.Name + '".');};};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;}
  var FCKCommands=new Object();var sNamedCommands=[ 'Cut','Copy','Paste','Print','Find','SelectAll','RemoveFormat','Unlink','Undo','Redo', 'Bold','Italic','Underline','StrikeThrough','Subscript','Superscript', 'JustifyLeft','JustifyCenter','JustifyRight','JustifyFull','Outdent','Indent', 'InsertOrderedList','InsertUnorderedList','InsertHorizontalRule'];for (i=0 ; i < sNamedCommands.length ; i++){FCKCommands[ sNamedCommands[i] ]=new FCKNamedCommand(sNamedCommands[i]);};FCKCommands['Link']			= new FCKDialogCommand( 'Link'			, FCKLang.DlgLnkWindowTitle, 'dialog/fck_link.html'	, 400, 330, FCK.GetNamedCommandState, 'CreateLink' );FCKCommands['About']		= new FCKDialogCommand( 'About'			, FCKLang.About, 'dialog/fck_about.html'	, 400, 330 );FCKCommands['Image']		= new FCKDialogCommand( 'Image'			, 'Image Properties', 'dialog/fck_image.html'		, 450, 400, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['Table']		= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html'		, 400, 250 );FCKCommands['TableProp']	= new FCKDialogCommand( 'Table'			, 'Table Properties', 'dialog/fck_table.html?Parent', 400, 250 );FCKCommands['SpecialChar']	= new FCKDialogCommand( 'SpecialChar'	, 'Select Character', 'dialog/fck_specialchar.html'	, 400, 300, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['Smiley']		= new FCKDialogCommand( 'Smiley'		, FCKLang.DlgSmileyTitle, 'dialog/fck_smiley.html'	, FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight, FCK.GetNamedCommandState, 'InsertImage' );FCKCommands['FontName']		= new FCKFontNameCommand();FCKCommands['FontSize']		= new FCKFontSizeCommand();FCKCommands['FontFormat']	= new FCKFormatBlockCommand();FCKCommands['Source']		= new FCKSourceCommand();FCKCommands['Preview']		= new FCKPreviewCommand();FCKCommands['Save']			= new FCKSaveCommand();FCKCommands['NewPage']		= new FCKNewPageCommand();FCKCommands['TextColor']	= new FCKTextColorCommand('ForeColor');FCKCommands['BGColor']		= new FCKTextColorCommand('BackColor');FCKCommands['PasteText']	= new FCKPastePlainTextCommand();FCKCommands['PasteWord']	= new FCKPasteWordCommand();FCKCommands['TableInsertRow']		= new FCKTableCommand('TableInsertRow');FCKCommands['TableDeleteRows']		= new FCKTableCommand('TableDeleteRows');FCKCommands['TableInsertColumn']	= new FCKTableCommand('TableInsertColumn');FCKCommands['TableDeleteColumns']	= new FCKTableCommand('TableDeleteColumns');FCKCommands['TableInsertCell']		= new FCKTableCommand('TableInsertCell');FCKCommands['TableDeleteCells']		= new FCKTableCommand('TableDeleteCells');FCKCommands['TableMergeCells']		= new FCKTableCommand('TableMergeCells');FCKCommands['TableSplitCell']		= new FCKTableCommand('TableSplitCell');FCKCommands['Undefined']	= new FCKUndefinedCommand();
  var FCKToolbarButton=function(commandName, label, tooltip, style, sourceView){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ONLYICON;this.SourceView=sourceView ? true : false;this.State=FCK_UNKNOWN;};FCKToolbarButton.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;this.DOMDiv.onmouseover=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED){this.className='TB_Button_On';};};this.DOMDiv.onmouseout=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State !=FCK_TRISTATE_ON){this.className='TB_Button_Off';};};this.DOMDiv.onclick=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED) this.FCKToolbarButton.Command.Execute();return false;};var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' + '<td class="TB_Text" unselectable="on">' + this.Label + '</td>' + '</tr>' + '</table>';var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarButton.prototype.RefreshState=function(){var eState;if (FCK.EditMode==FCK_EDITMODE_SOURCE && ! this.SourceView) eState=FCK_TRISTATE_DISABLED;else eState=this.Command.GetState();if (eState==this.State) return;this.State=eState;switch (this.State){case FCK_TRISTATE_ON : this.DOMDiv.className='TB_Button_On';break;case FCK_TRISTATE_OFF : this.DOMDiv.className='TB_Button_Off';break;default : this.DOMDiv.className='TB_Button_Disabled';break;};}
  var FCKToolbarCombo=function(commandName, label, itemsValues, itemsNames, tooltip, style, firstIsBlank, itemsSeparator, sourceView){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ICONTEXT;this.SourceView=sourceView ? true : false;this.State=FCK_UNKNOWN;this.ItemsValues=itemsValues;this.ItemsNames=itemsNames ? itemsNames : itemsValues;this.ItemsSeparator=itemsSeparator ? itemsSeparator : ';';this.FirstIsBlank=firstIsBlank !=null ? firstIsBlank : true;};FCKToolbarCombo.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Combo_Off';var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Text" unselectable="on" nowrap>' + this.Label + '</td>' + '<td unselectable="on"><select title="' + this.Tooltip + '"></select></td>' + '</tr>' + '</table>';this.SelectElement=this.DOMDiv.firstChild.firstChild.firstChild.childNodes.item(1).firstChild;this.SelectElement.FCKToolbarCombo=this;this.SelectElement.onchange=function(){this.FCKToolbarCombo.Command.Execute(this.value);return false;};var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshItems();this.RefreshState();};FCKToolbarCombo.prototype.RefreshItems=function(){var aNames=FCKTools.GetResultingArray(this.ItemsNames, this.ItemsSeparator);var aValues=FCKTools.GetResultingArray(this.ItemsValues, this.ItemsSeparator);FCKTools.RemoveAllSelectOptions(this.SelectElement);if (this.FirstIsBlank) FCKTools.AddSelectOption(document, this.SelectElement, '', '');for (var i=0 ; i < aValues.length ; i++){FCKTools.AddSelectOption(document, this.SelectElement, aNames[i], aValues[i]);};};FCKToolbarCombo.prototype.RefreshState=function(){var eState;if (FCK.EditMode==FCK_EDITMODE_SOURCE && ! this.SourceView){eState=FCK_TRISTATE_DISABLED;this.SelectElement.value='';}else{var sValue=this.Command.GetState();FCKTools.SelectNoCase(this.SelectElement, sValue ? sValue : '', '');eState=sValue==null ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_ON;};if (eState==this.State) return;this.State=eState;this.DOMDiv.className=(eState==FCK_TRISTATE_ON ? 'TB_Combo_Off' : 'TB_Combo_Disabled');this.SelectElement.disabled=(eState==FCK_TRISTATE_DISABLED);};
  var FCKToolbarPanelButton=function(commandName, label, tooltip, style){this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.Tooltip=tooltip ? tooltip : (label ? label : commandName);this.Style=style ? style : FCK_TOOLBARITEM_ONLYICON;this.State=FCK_UNKNOWN;if (this.Command==null) alert('Unknown command name "' + commandName + '"');};FCKToolbarPanelButton.prototype.CreateInstance=function(parentToolbar){this.DOMDiv=document.createElement('div');this.DOMDiv.className='TB_Button_Off';this.DOMDiv.FCKToolbarButton=this;this.DOMDiv.onmouseover=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED){this.className='TB_Button_On';};};this.DOMDiv.onmouseout=function(){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED &&  this.FCKToolbarButton.State !=FCK_TRISTATE_ON){this.className='TB_Button_Off';};};this.DOMDiv.onclick=function(ev){if (this.FCKToolbarButton.State !=FCK_TRISTATE_DISABLED) this.FCKToolbarButton.HandleOnClick(this.FCKToolbarButton, ev);if (ev) ev.stopPropagation();return false;};var sClass;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON : sClass='TB_ButtonType_Icon';break;case FCK_TOOLBARITEM_ONLYTEXT : sClass='TB_ButtonType_Text';break;case FCK_TOOLBARITEM_ICONTEXT : sClass='';break;};this.DOMDiv.innerHTML='<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0" unselectable="on">' + '<tr>' + '<td class="TB_Icon" unselectable="on"><img src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on"></td>' + '<td class="TB_Text" unselectable="on">' + this.Label + '</td>' + '<td class="TB_ButtonArrow" unselectable="on"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' + '</tr>' + '</table>';var oCell=parentToolbar.DOMRow.insertCell(-1);oCell.appendChild(this.DOMDiv);this.RefreshState();};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;
  FCKToolbarPanelButton.prototype.HandleOnClick=function(panelButton, ev){var e=panelButton.DOMDiv;var oDivCoords=FCKTools.GetElementPosition(e);var iPanX=oDivCoords.X + window.screenLeft;var iPanY=oDivCoords.Y + window.screenTop + e.offsetHeight + 1;panelButton.Command.Execute(iPanX,iPanY);}
  var FCKToolbarItems=new Object();FCKToolbarItems['Source']		= new FCKToolbarButton( 'Source', 'Source', null, FCK_TOOLBARITEM_ICONTEXT, true );FCKToolbarItems['Save']			= new FCKToolbarButton( 'Save', null, null, null, true  );FCKToolbarItems['NewPage']		= new FCKToolbarButton( 'NewPage', null, null, null, true  );FCKToolbarItems['Preview']		= new FCKToolbarButton( 'Preview', null, null, null, true  );FCKToolbarItems['About']		= new FCKToolbarButton( 'About', FCKLang.About );FCKToolbarItems['Cut']			= new FCKToolbarButton( 'Cut', FCKLang.Cut, null, null, true );FCKToolbarItems['Copy']			= new FCKToolbarButton( 'Copy', FCKLang.Copy, null, null, true );FCKToolbarItems['Paste']		= new FCKToolbarButton( 'Paste', FCKLang.Paste, null, null, true );FCKToolbarItems['PasteText']	= new FCKToolbarButton( 'PasteText', FCKLang.PasteText );FCKToolbarItems['PasteWord']	= new FCKToolbarButton( 'PasteWord', FCKLang.PasteWord );FCKToolbarItems['Print']		= new FCKToolbarButton( 'Print', null, null, null, true );FCKToolbarItems['Undo']			= new FCKToolbarButton( 'Undo', null, null, null, true );FCKToolbarItems['Redo']			= new FCKToolbarButton( 'Redo', null, null, null, true );FCKToolbarItems['Find']			= new FCKToolbarButton( 'Find', null, null, null, true );FCKToolbarItems['SelectAll']	= new FCKToolbarButton( 'SelectAll', 'Select All', null, null, true );FCKToolbarItems['RemoveFormat']	= new FCKToolbarButton( 'RemoveFormat', 'Remove Format' );FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink' );FCKToolbarItems['Bold']			= new FCKToolbarButton( 'Bold' );FCKToolbarItems['Italic']		= new FCKToolbarButton( 'Italic' );FCKToolbarItems['Underline']	= new FCKToolbarButton( 'Underline' );FCKToolbarItems['StrikeThrough']= new FCKToolbarButton( 'StrikeThrough', 'Strike Through' );FCKToolbarItems['Subscript']	= new FCKToolbarButton( 'Subscript' );FCKToolbarItems['Superscript']	= new FCKToolbarButton( 'Superscript' );FCKToolbarItems['OrderedList']	= new FCKToolbarButton( 'InsertOrderedList', 'Ordered List', 'Insert/Remove Ordered List' );FCKToolbarItems['UnorderedList']= new FCKToolbarButton( 'InsertUnorderedList', 'Unordered List', 'Insert/Remove Unordered List' );FCKToolbarItems['Outdent']		= new FCKToolbarButton( 'Outdent' );FCKToolbarItems['Indent']		= new FCKToolbarButton( 'Indent' );FCKToolbarItems['Link']			= new FCKToolbarButton( 'Link', 'Link', 'Create/Edit Link' );FCKToolbarItems['Unlink']		= new FCKToolbarButton( 'Unlink', 'Remove Link' );FCKToolbarItems['Image']		= new FCKToolbarButton( 'Image', 'Image', 'Insert/Edit Image' );FCKToolbarItems['Table']		= new FCKToolbarButton( 'Table', 'Table', 'Create/Edit Table' );FCKToolbarItems['SpecialChar']	= new FCKToolbarButton( 'SpecialChar', 'Special Character', 'Insert Special Character' );FCKToolbarItems['Smiley']		= new FCKToolbarButton( 'Smiley', 'Smiley', 'Insert Smiley' );FCKToolbarItems['Rule']			= new FCKToolbarButton( 'InsertHorizontalRule', 'Horizontal Rule', 'Insert Horizontal Rule' );FCKToolbarItems['JustifyLeft']	= new FCKToolbarButton( 'JustifyLeft', 'Align Left' );FCKToolbarItems['JustifyCenter']= new FCKToolbarButton( 'JustifyCenter', 'Center' );FCKToolbarItems['JustifyRight']	= new FCKToolbarButton( 'JustifyRight', 'Align Right' );FCKToolbarItems['JustifyFull']	= new FCKToolbarButton( 'JustifyFull', 'Justify' );FCKToolbarItems['FontName']		= new FCKToolbarCombo( 'FontName', FCKLang['Font'], FCKConfig.FontNames, FCKConfig.FontNames );FCKToolbarItems['FontSize']		= new FCKToolbarCombo( 'FontSize', FCKLang['FontSize'], '1;2;3;4;5;6;7', 'xx-small;x-small;small;medium;large;x-large;xx-large' );FCKToolbarItems['FontFormat']	= new FCKToolbarCombo( 'FontFormat', FCKLang['FontFormat'], '<P>;<DIV>;<H1>;<H2>', 'Normal (P);Normal (DIV);Heading 1;Heading 2' );FCKToolbarItems['TextColor']	= new FCKToolbarPanelButton( 'TextColor' );FCKToolbarItems['BGColor']		= new FCKToolbarPanelButton( 'BGColor' );
  var FCKToolbar=function(){this.Items=new Array();this.DOMTable=document.createElement('table');this.DOMTable.className='TB_Toolbar';with (this.DOMTable){style.styleFloat=style.cssFloat=FCKLang.Dir=='rtl' ? 'right' : 'left';cellPadding=0;cellSpacing=0;border=0;};this.DOMRow=this.DOMTable.insertRow(-1);var oCell=this.DOMRow.insertCell(-1);oCell.className='TB_Start';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.start.gif" width="7" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';FCKToolbarSet.DOMElement.appendChild(this.DOMTable);};FCKToolbar.prototype.AddItem=function(toolbarItem){this.Items[ this.Items.length ]=toolbarItem;toolbarItem.CreateInstance(this);};FCKToolbar.prototype.AddSeparator=function(){var oCell=this.DOMRow.insertCell(-1);oCell.unselectable='on';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.separator.gif" width="5" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};FCKToolbar.prototype.AddTerminator=function(){var oCell=this.DOMRow.insertCell(-1);oCell.className='TB_End';oCell.innerHTML='<img src="' + FCKConfig.SkinPath + 'images/toolbar.end.gif" width="12" height="21" style="VISIBILITY: hidden" onload="this.style.visibility = \'\';" unselectable="on">';};
  var FCKToolbarSet=new Object();FCKToolbarSet.Toolbars=new Array();FCKToolbarSet.Expand=function(){document.getElementById('Collapsed').style.display = 'none';document.getElementById('Expanded').style.display = '';if (! FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()", 1);};};FCKToolbarSet.Collapse=function(){document.getElementById('Collapsed').style.display = '';document.getElementById('Expanded').style.display = 'none';if (! FCKBrowserInfo.IsIE){window.setTimeout("window.onresize()", 1);};};FCKToolbarSet.Restart=function(){if (!FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();document.getElementById('CollapseHandle').style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none';};FCKToolbarSet.Load=function(toolbarSetName){this.DOMElement=document.getElementById('eToolbar');var ToolbarSet=FCKConfig.ToolbarSets[toolbarSetName];if (! ToolbarSet){alert('Toolbar set "' + toolbarSetName + '" doesn\'t exist.');return;};this.Toolbars=new Array();for (var x=0 ; x < ToolbarSet.length ; x++){var oToolbar=new FCKToolbar();for (var j=0 ; j < ToolbarSet[x].length ; j++){var sItem=ToolbarSet[x][j];if (sItem=='-') oToolbar.AddSeparator();else{var oItem=FCKToolbarItems[sItem];if (oItem) oToolbar.AddItem(oItem);else alert('Unknown toolbar item name "' + sItem + "'");};};oToolbar.AddTerminator();this.Toolbars[ this.Toolbars.length ]=oToolbar;};this.Redraw();};FCKToolbarSet.Redraw=function(){};FCKToolbarSet.RefreshItemsState=function(){for (var i=0 ; i < FCKToolbarSet.Toolbars.length ; i++){var oToolbar=FCKToolbarSet.Toolbars[i];for (var j=0 ; j < oToolbar.Items.length ; j++){oToolbar.Items[j].RefreshState();};};};
  var FCKDialog=new Object();FCKDialog.OpenDialog=function(dialogName, dialogTitle, dialogPage, width, height, customValue){var oDialogInfo=new Object();oDialogInfo.Title=dialogTitle;oDialogInfo.Page=dialogPage;oDialogInfo.Editor=window;oDialogInfo.CustomValue=customValue;var sUrl=FCKConfig.BasePath + 'fckdialog.html';this.Show(oDialogInfo, dialogName, sUrl, width, height);};
  FCKDialog.Show=function(dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight){window.showModalDialog(pageUrl, dialogInfo, "dialogWidth:" + dialogWidth + "px;dialogHeight:" + dialogHeight + "px;help:no;scroll:no;status:no");};
  var FCKContextMenuItem=function(contextMenu, commandName, label, hasIcon){this.ContextMenu=contextMenu;this.Command=FCKCommands[ commandName ];this.Label=label ? label : commandName;this.HasIcon=hasIcon ? true : false;};FCKContextMenuItem.prototype.CreateTableRow=function(targetTable){this._Row=targetTable.insertRow(-1);this._Row.className='CM_Disabled';this._Row.FCKContextMenuItem=this;this._Row.onmouseover=function(){if (this.className !='CM_Disabled') this.className='CM_Over';};this._Row.onmouseout=function(){if (this.className !='CM_Disabled') this.className='CM_Option';};this._Row.onclick=function(){this.FCKContextMenuItem.ContextMenu.Hide();this.FCKContextMenuItem.Command.Execute();return false;};var oCell=this._Row.insertCell(-1);oCell.className='CM_Icon';if (this.HasIcon ) oCell.innerHTML='<img alt="" src="' + FCKConfig.SkinPath + 'toolbar/button.' + this.Command.Name.toLowerCase() + '.gif" width="21" height="20" unselectable="on">';oCell=this._Row.insertCell(-1);oCell.className='CM_Label';oCell.unselectable='on';oCell.noWrap=true;oCell.innerHTML=this.Label;};FCKContextMenuItem.prototype.SetVisible=function(isVisible){this._Row.style.display=isVisible ? '' : 'none';};FCKContextMenuItem.prototype.RefreshState=function(){switch (this.Command.GetState()){case FCK_TRISTATE_ON : case FCK_TRISTATE_OFF : this._Row.className='CM_Option';break;default : this._Row.className='CM_Disabled';break;};};
  var FCKContextMenuSeparator=function(){};FCKContextMenuSeparator.prototype.CreateTableRow=function(targetTable){this._Row=targetTable.insertRow(-1);this._Row.className='CM_Separator';var oCell=this._Row.insertCell(-1);oCell.className='CM_Icon';oCell=this._Row.insertCell(-1);oCell.className='CM_Label';oCell.innerHTML='<div></div>';};FCKContextMenuSeparator.prototype.SetVisible=function(isVisible){this._Row.style.display=isVisible ? '' : 'none';};FCKContextMenuSeparator.prototype.RefreshState=function(){};
  var FCKContextMenuGroup=function(){this.IsVisible=true;this.Items=new Array();this.ValidationFunction=null;};FCKContextMenuGroup.prototype.Add=function(contextMenuItem){this.Items[ this.Items.length ]=contextMenuItem;};FCKContextMenuGroup.prototype.CreateTableRows=function(table){for (var i=0 ; i < this.Items.length ; i++){this.Items[i].CreateTableRow(table);};};FCKContextMenuGroup.prototype.SetVisible=function(isVisible){for (var i=0 ; i < this.Items.length ; i++){this.Items[i].SetVisible(isVisible);};this.IsVisible=isVisible;};FCKContextMenuGroup.prototype.RefreshState=function(){if (! this.IsVisible) return;for (var i=0 ; i < this.Items.length ; i++){this.Items[i].RefreshState();};}
  var FCKContextMenu=new Object();FCKContextMenu._IsLoaded=false;FCKContextMenu.Reload=function(){this._Div=this._Document.createElement('DIV');this._Div.className='CM_ContextMenu';this._Div.style.position='absolute';this._Div.style.visibility='hidden';this._Document.body.appendChild(this._Div);var oTable=this._Document.createElement('TABLE');oTable.cellSpacing=0;oTable.cellPadding=0;oTable.border=0;this._Div.appendChild(oTable);this.Groups=new Object();this.Groups['Generic'] = new FCKContextMenuGroup();with (this.Groups['Generic']){Add(new FCKContextMenuItem( this, 'Cut'	, FCKLang['Cut']	, true ));Add(new FCKContextMenuItem( this, 'Copy'	, FCKLang['Copy']	, true ));Add(new FCKContextMenuItem( this, 'Paste'	, FCKLang['Paste']	, true ));};this.Groups['Link'] = new FCKContextMenuGroup();with (this.Groups['Link']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Link'	, FCKLang['EditLink']	, true ));Add(new FCKContextMenuItem( this, 'Unlink'	, FCKLang['RemoveLink']	, true ));};this.Groups['TableCell'] = new FCKContextMenuGroup();with (this.Groups['TableCell']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertRow', FCKLang["InsertRow"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteRows', FCKLang["DeleteRows"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertColumn', FCKLang["InsertColumn"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteColumns', FCKLang["DeleteColumns"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableInsertCell', FCKLang["InsertCell"], true ));Add(new FCKContextMenuItem( this, 'TableDeleteCells', FCKLang["DeleteCells"], true ));Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'TableProp', FCKLang["TableProperties"], true ));};this.Groups['Table'] = new FCKContextMenuGroup();with (this.Groups['Table']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Table', FCKLang["TableProperties"], true ));};this.Groups['Image'] = new FCKContextMenuGroup();with (this.Groups['Image']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Image', FCKLang["ImageProperties"], true ));};this.Groups['Select'] = new FCKContextMenuGroup();with (this.Groups['Select']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Undefined', "Selection Field Properties" ));};this.Groups['Textarea'] = new FCKContextMenuGroup();with (this.Groups['Textarea']){Add(new FCKContextMenuSeparator());Add(new FCKContextMenuItem( this, 'Undefined', "Textarea Properties" ));};for (var o in this.Groups){this.Groups[o].CreateTableRows(oTable);};this._IsLoaded=true;};FCKContextMenu.RefreshState=function(){var oTag=FCKSelection.GetSelectedElement();var sTagName;if (oTag){sTagName=oTag.tagName;};this.Groups['Link'].SetVisible( FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED );this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' && FCKSelection.HasAncestorNode('TABLE') );this.Groups['Table'].SetVisible( sTagName == 'TABLE' );this.Groups['Image'].SetVisible( sTagName == 'IMG' );this.Groups['Select'].SetVisible( sTagName == 'SELECT' );this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' );for (var o in this.Groups){this.Groups[o].RefreshState();};};
  FCKContextMenu.Show=function(x, y){if (! this._Popup){this._Popup=window.createPopup();this._Document=this._Popup.document;this._Document.createStyleSheet(FCKConfig.SkinPath + 'fck_contextmenu.css');this._Document.oncontextmenu=function() { return false ;};};if (!this._IsLoaded){this.Reload();this._Div.style.visibility='';};this.RefreshState();this._Popup.show(x, y, 0, 0);this._Popup.show(x, y, this._Div.offsetWidth, this._Div.offsetHeight);};FCKContextMenu.Hide=function(){if (this._Popup) this._Popup.hide();}
  if (FCKConfig.ForcePasteAsPlainText) FCK.Events.AttachEvent("OnPaste", FCK.Paste);FCKToolbarSet.Name=FCKURLParams['Toolbar'] || 'Default';FCKToolbarSet.Load(FCKToolbarSet.Name);FCKToolbarSet.Restart();FCK.AttachToOnSelectionChange(FCKToolbarSet.RefreshItemsState);FCK.Config=FCKConfig;FCK.ToolbarSet=FCKToolbarSet;FCK.SetStatus(FCK_STATUS_COMPLETE);if (typeof( window.parent.FCKeditor_OnComplete )=='function') window.parent.FCKeditor_OnComplete(FCK);
  
  
  


comfuture    04/11/24 21:25:26

  Added:       util/fckeditor/editor/lang ar.js en.js it.js ko.js pt-br.js
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/lang/ar.js
  
  Index: ar.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: ar.js
   * 	Arabic language file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-27 14:04:07
   * 
   * File Authors:
   * 		Aziz Oraij (aziz@oraij.com)
   */
  
  var FCKLang =
  {
  // Language direction : "ltr" (left to right) or "rtl" (right to left).
  "Dir"				: "rtl",
  
  // Toolbar Items and Context Menu
  "Cut"				: "قص",
  "Copy"				: "نسخ",
  "Paste"				: "لصق",
  "PasteText"			: "لصق كنص بسيط",
  "PasteWord"			: "لصق من وورد",
  "Find"				: "بحث",
  "SelectAll"			: "تحديد الكل",
  "RemoveFormat"		: "إزالة التنسيقات",
  "InsertLink"		: "إدراج/تحرير رابط",
  "RemoveLink"		: "إزالة رابط",
  "InsertImage"		: "إدراج/تحرير صورة",
  "InsertTable"		: "إدراج/تحرير جدول",
  "InsertLine"		: "إدراج خط فاصل",
  "InsertSpecialChar"	: "إدراج  رمز..ِ",
  "InsertSmiley"		: "إدراج ابتسامات",
  "About"				: "حول FCKeditor",
  
  "Bold"				: "غامق",
  "Italic"			: "مائل",
  "Underline"			: "تسطير",
  "StrikeThrough"		: "يتوسطه خط",
  "Subscript"			: "منخفض",
  "Superscript"		: "مرتفع",
  "LeftJustify"		: "محاذاة إلى اليسار",
  "CenterJustify"		: "توسيط",
  "RightJustify"		: "محاذاة إلى اليمين",
  "BlockJustify"		: "ضبط",
  "DecreaseIndent"	: "إنقاص المسافة البادئة",
  "IncreaseIndent"	: "زيادة المسافة البادئة",
  "Undo"				: "تراجع",
  "Redo"				: "إعادة",
  "NumberedList"		: "تعداد رقمي",
  "BulletedList"		: "تعداد نقطي",
  
  "ShowTableBorders"	: "معاينة حدود الجداول",
  "ShowDetails"		: "معاينة التفاصيل",
  
  "FontStyle"			: "نمط",
  "FontFormat"		: "تنسيق",
  "Font"				: "خط",
  "FontSize"			: "حجم الخط",
  "TextColor"			: "لون النص",
  "BGColor"			: "لون الخلفية",
  "Source"			: "شفرة المصدر",
  
  // Context Menu
  
  "EditLink"			: "تحرير رابط",
  "InsertRow"			: "إدراج صف",
  "DeleteRows"		: "حذف صفوف",
  "InsertColumn"		: "إدراج عمود",
  "DeleteColumns"		: "حذف أعمدة",
  "InsertCell"		: "إدراج خلية",
  "DeleteCells"		: "حذف خلايا",
  "MergeCells"		: "دمج خلايا",
  "SplitCell"			: "تقسيم خلية",
  "CellProperties"	: "خصائص الخلية",
  "TableProperties"	: "خصائص الجدول",
  "ImageProperties"	: "خصائص الصورة",
  
  // Alerts and Messages
  
  "ProcessingXHTML"	: "تتم الآن معالجة  XHTML. انتظر قليلاً...",
  "Done"				: "تم",
  "PasteWordConfirm"	: "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟",
  "NotCompatiblePaste": "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?",
  
  // Dialogs
  "DlgBtnOK"			: "موافق",
  "DlgBtnCancel"		: "إلغاء الأمر",
  "DlgBtnClose"		: "إغلاق",
  
  // Image Dialog
  "DlgImgTitleInsert"	: "إدراج صورة",
  "DlgImgTitleEdit"	: "تحرير صورة",
  "DlgImgBtnUpload"	: "أرسلها للخادم",
  "DlgImgURL"			: "URL",
  "DlgImgUpload"		: "رفع",
  "DlgImgBtnBrowse"	: "تصفح صور الموقع",
  "DlgImgAlt"			: "الوصف",
  "DlgImgWidth"		: "العرض",
  "DlgImgHeight"		: "الارتفاع",
  "DlgImgLockRatio"	: "المحافظة على نسبة العرض للارتفاع",
  "DlgBtnResetSize"	: "استعادة الحجم الأصلي",
  "DlgImgBorder"		: "سمك الحدود",
  "DlgImgHSpace"		: "تباعد أفقي",
  "DlgImgVSpace"		: "تباعد عمودي",
  "DlgImgAlign"		: "محاذاة",
  "DlgImgAlignLeft"	: "يسار",
  "DlgImgAlignAbsBottom"	: "أسفل النص",
  "DlgImgAlignAbsMiddle"	: "وسط السطر",
  "DlgImgAlignBaseline"	: "على السطر",
  "DlgImgAlignBottom"	: "أسفل",
  "DlgImgAlignMiddle"	: "وسط",
  "DlgImgAlignRight"	: "يمين",
  "DlgImgAlignTextTop": "أعلى النص",
  "DlgImgAlignTop"	: "أعلى",
  "DlgImgPreview"		: "معاينة",
  "DlgImgMsgWrongExt"	: "عفواً، لا يسمح برفع الملفات غير المطابقة لأنواع الملفات التالية:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperation canceled.",
  "DlgImgAlertSelect"	: "فضلاً اختر صورة ليتم رفعها.",		// NEW
  
  
  // Link Dialog
  "DlgLnkWindowTitle"	: "ارتباط تشعبي",		// NEW
  "DlgLnkURL"			: "URL",
  "DlgLnkUpload"		: "رفع",
  "DlgLnkTarget"		: "الهدف",
  "DlgLnkTargetNotSet": "<Not set>",
  "DlgLnkTargetBlank"	: "إطار جديد (_blank)",
  "DlgLnkTargetParent": "الإطار الأصل (_parent)",
  "DlgLnkTargetSelf"	: "نفس الإطار (_self)",
  "DlgLnkTargetTop"	: "صفحة كاملة (_top)",
  "DlgLnkTitle"		: "وصف الرابط",
  "DlgLnkBtnUpload"	: "أرسل للموقع",
  "DlgLnkBtnBrowse"	: "تصفح الموقع",
  "DlgLnkMsgWrongExtA": "عفواً، لا يسمح برفع الملفات غير المطابقة لأنواع الملفات التالية:\n\n" + FCKConfig.LinkUploadAllowedExtensions + "\n\nOperation canceled.",
  "DlgLnkMsgWrongExtD": "عفواً، لا يسمح برفع الملفات ذات أنواع الملفات التالية:\n\n" + FCKConfig.LinkUploadDeniedExtensions + "\n\nOperation canceled.",
  
  // Color Dialog
  "DlgColorTitle"		: "اختر لوناً",
  "DlgColorBtnClear"	: "مسح",
  "DlgColorHighlight"	: "تحديد",
  "DlgColorSelected"	: "اختيار",
  
  // Smiley Dialog
  "DlgSmileyTitle"	: "إدراج ابتسامات ",
  
  // Special Character Dialog
  "DlgSpecialCharTitle"	: "إدراج رمز",
  
  // Table Dialog
  "DlgTableTitleInsert"	: "إدراج جدول",
  "DlgTableTitleEdit"	: "تحرير جدول",
  "DlgTableRows"		: "صفوف",
  "DlgTableColumns"	: "أعمدة",
  "DlgTableBorder"	: "سمك الحدود",
  "DlgTableAlign"		: "المحاذاة",
  "DlgTableAlignNotSet"	: "<Not set>",
  "DlgTableAlignLeft"	: "يسار",
  "DlgTableAlignCenter"	: "وسط",
  "DlgTableAlignRight": "يمين",
  "DlgTableWidth"		: "العرض",
  "DlgTableWidthPx"	: "بكسل",
  "DlgTableWidthPc"	: "بالمئة",
  "DlgTableHeight"	: "الارتفاع",
  "DlgTableCellSpace"	: "تباعد الخلايا",
  "DlgTableCellPad"	: "المسافة البادئة",
  "DlgTableCaption"	: "الوصف",
  
  // Table Cell Dialog
  "DlgCellTitle"		: "خصائص الخلية",
  "DlgCellWidth"		: "العرض",
  "DlgCellWidthPx"	: "بكسل",
  "DlgCellWidthPc"	: "بالمئة",
  "DlgCellHeight"		: "الارتفاع",
  "DlgCellWordWrap"	: "التفاف النص",
  "DlgCellWordWrapNotSet"	: "<Not set>",
  "DlgCellWordWrapYes": "نعم",
  "DlgCellWordWrapNo"	: "لا",
  "DlgCellHorAlign"	: "المحاذاة الأفقية",
  "DlgCellHorAlignNotSet"	: "<Not set>",
  "DlgCellHorAlignLeft"	: "يسار",
  "DlgCellHorAlignCenter"	: "وسط",
  "DlgCellHorAlignRight"	: "يمين",
  "DlgCellVerAlign"		: "المحاذاة العمودية",
  "DlgCellVerAlignNotSet"	: "<Not set>",
  "DlgCellVerAlignTop"	: "أعلى",
  "DlgCellVerAlignMiddle"	: "وسط",
  "DlgCellVerAlignBottom"	: "أسفل",
  "DlgCellVerAlignBaseline"	: "على السطر",
  "DlgCellRowSpan"	: "امتداد الصفوف",
  "DlgCellCollSpan"	: "امتداد الأعمدة",
  "DlgCellBackColor"	: "لون الخلفية",
  "DlgCellBorderColor": "لون الحدود",
  "DlgCellBtnSelect"	: "حدّد...",
  
  // About Dialog
  "DlgAboutVersion"	: "الإصدار",
  "DlgAboutLicense"	: "مرخّص بحسب قانون  GNU LGPL",
  "DlgAboutInfo"		: "لمزيد من المعلومات تفضل بزيارة"
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/lang/en.js
  
  Index: en.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: en.js
   * 	English language file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKLang =
  {
  // Language direction : "ltr" (left to right) or "rtl" (right to left).
  "Dir"				: "ltr",
  
  // Toolbar Items and Context Menu
  "Cut"				: "Cut" ,
  "Copy"				: "Copy" ,
  "Paste"				: "Paste" ,
  "PasteText"			: "Paste as plain text" ,
  "PasteWord"			: "Paste from Word" ,
  "Find"				: "Find" ,
  "SelectAll"			: "Select All" ,
  "RemoveFormat"		: "Remove Format" ,
  "InsertLink"		: "Insert/Edit Link" ,
  "RemoveLink"		: "Remove Link" ,
  "InsertImage"		: "Insert/Edit Image" ,
  "InsertTable"		: "Insert/Edit Table" ,
  "InsertLine"		: "Insert Horizontal Line" ,
  "InsertSpecialChar"	: "Insert Special Character" ,
  "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" ,
  "Undo"				: "Undo" ,
  "Redo"				: "Redo" ,
  "NumberedList"		: "Numbered List" ,
  "BulletedList"		: "Bulleted List" ,
  "ShowTableBorders"	: "Show Table Borders" ,
  "ShowDetails"		: "Show Details" ,
  "FontStyle"			: "Style" ,
  "FontFormat"		: "Format" ,
  "Font"				: "Font" ,
  "FontSize"			: "Size" ,
  "TextColor"			: "Text Color" ,
  "BGColor"			: "Background Color" ,
  "Source"			: "Source" ,
  
  // Context Menu
  "EditLink"			: "Edit Link" ,
  "InsertRow"			: "Insert Row" ,
  "DeleteRows"		: "Delete Rows" ,
  "InsertColumn"		: "Insert Column" ,
  "DeleteColumns"		: "Delete Columns" ,
  "InsertCell"		: "Insert Cell" ,
  "DeleteCells"		: "Delete Cells" ,
  "MergeCells"		: "Merge Cells" ,
  "SplitCell"			: "Split Cell" ,
  "CellProperties"	: "Cell Properties" ,
  "TableProperties"	: "Table Properties" ,
  "ImageProperties"	: "Image Properties" ,
  
  // 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?" ,
  
  // Dialogs
  "DlgBtnOK"			: "OK" ,
  "DlgBtnCancel"		: "Cancel" ,
  "DlgBtnClose"		: "Close" ,
  
  // Image Dialog
  "DlgImgTitleInsert"	: "Insert Image" ,
  "DlgImgTitleEdit"	: "Edit Image" ,
  "DlgImgBtnUpload"	: "Send it to the Server" ,
  "DlgImgURL"			: "URL" ,
  "DlgImgUpload"		: "Upload" ,
  "DlgImgBtnBrowse"	: "Browse Server" ,
  "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" ,
  "DlgImgMsgWrongExt"	: "Sorry, only the following file types uploads are allowed:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperation canceled." ,
  "DlgImgAlertSelect"	: "Please select an image to upload." ,
  
  // Link Dialog
  "DlgLnkWindowTitle"	: "Link" ,
  "DlgLnkURL"			: "URL" ,
  "DlgLnkUpload"		: "Upload" ,
  "DlgLnkTarget"		: "Target" ,
  "DlgLnkTargetNotSet": "<Not set>" ,
  "DlgLnkTargetBlank"	: "New Window (_blank)" ,
  "DlgLnkTargetParent": "Parent Window (_parent)" ,
  "DlgLnkTargetSelf"	: "Same Window (_self)" ,
  "DlgLnkTargetTop"	: "Topmost Window (_top)" ,
  "DlgLnkTitle"		: "Title" ,
  "DlgLnkBtnUpload"	: "Send it to the Server" ,
  "DlgLnkBtnBrowse"	: "Browse Server" ,
  "DlgLnkMsgWrongExtA": "Sorry, only the following file types uploads are allowed:\n\n" + FCKConfig.LinkUploadAllowedExtensions + "\n\nOperation canceled." ,
  "DlgLnkMsgWrongExtD": "Sorry, the following file types uploads are not allowed:\n\n" + FCKConfig.LinkUploadDeniedExtensions + "\n\nOperation canceled." ,
  
  // Color Dialog
  "DlgColorTitle"		: "Select Color" ,
  "DlgColorBtnClear"	: "Clear" ,
  "DlgColorHighlight"	: "Highlight" ,
  "DlgColorSelected"	: "Selected" ,
  
  // Smiley Dialog
  "DlgSmileyTitle"	: "Insert a Smiley" ,
  
  // Special Character Dialog
  "DlgSpecialCharTitle"	: "Insert Special Character" ,
  
  // Table Dialog
  "DlgTableTitleInsert"	: "Insert Table" ,
  "DlgTableTitleEdit"		: "Edit Table" ,
  "DlgTableRows"			: "Rows" ,
  "DlgTableColumns"		: "Columns" ,
  "DlgTableBorder"		: "Border size" ,
  "DlgTableAlign"			: "Alignment" ,
  "DlgTableAlignNotSet"	: "<Not set>" ,
  "DlgTableAlignLeft"		: "Left" ,
  "DlgTableAlignCenter"	: "Center" ,
  "DlgTableAlignRight"	: "Right" ,
  "DlgTableWidth"			: "Width" ,
  "DlgTableWidthPx"		: "pixels" ,
  "DlgTableWidthPc"		: "percent" ,
  "DlgTableHeight"		: "Height" ,
  "DlgTableCellSpace"		: "Cell spacing" ,
  "DlgTableCellPad"		: "Cell padding" ,
  "DlgTableCaption"		: "Caption" ,
  
  // Table Cell Dialog
  "DlgCellTitle"			: "Cell Properties" ,
  "DlgCellWidth"			: "Width" ,
  "DlgCellWidthPx"		: "pixels" ,
  "DlgCellWidthPc"		: "percent" ,
  "DlgCellHeight"			: "Height" ,
  "DlgCellWordWrap"		: "Word Wrap" ,
  "DlgCellWordWrapNotSet"	: "<Not set>" ,
  "DlgCellWordWrapYes"	: "Yes" ,
  "DlgCellWordWrapNo"		: "No" ,
  "DlgCellHorAlign"		: "Horizontal Alignment" ,
  "DlgCellHorAlignNotSet"	: "<Not set>" ,
  "DlgCellHorAlignLeft"	: "Left" ,
  "DlgCellHorAlignCenter"	: "Center" ,
  "DlgCellHorAlignRight"	: "Right" ,
  "DlgCellVerAlign"		: "Vertical Alignment" ,
  "DlgCellVerAlignNotSet"	: "<Not set>" ,
  "DlgCellVerAlignTop"	: "Top" ,
  "DlgCellVerAlignMiddle"	: "Middle" ,
  "DlgCellVerAlignBottom"	: "Bottom" ,
  "DlgCellVerAlignBaseline"	: "Baseline" ,
  "DlgCellRowSpan"		: "Rows Span" ,
  "DlgCellCollSpan"		: "Columns Span" ,
  "DlgCellBackColor"		: "Background Color" ,
  "DlgCellBorderColor"	: "Border Color" ,
  "DlgCellBtnSelect"		: "Select..." ,
  
  // About Dialog
  "DlgAboutVersion"	: "version" ,
  "DlgAboutLicense"	: "Licensed under the terms of the GNU Lesser General Public License" ,
  "DlgAboutInfo"		: "For further information go to"
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/lang/it.js
  
  Index: it.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: it.js
   * 	Italian language file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-27 19:26:03
   * 
   * File Authors:
   * 		Simone Chiaretta
   */
  
  var FCKLang =
  {
  // Language direction : "ltr" (left to right) or "rtl" (right to left).
  "Dir"				: "ltr",
  
  // Toolbar Items and Context Menu
  "Cut"				: "Taglia",
  "Copy"				: "Copia",
  "Paste"				: "Incolla",
  "PasteText"			: "Incolla come testo semplice",
  "PasteWord"			: "Incolla da Word",
  "Find"				: "Cerca",
  "SelectAll"			: "Seleziona tutto",
  "RemoveFormat"		: "Rimuovi formattazione",
  "InsertLink"		: "Inserisci/Modifica Link",
  "RemoveLink"		: "Rimuovi Link",
  "InsertImage"		: "Inserisci/Modifica immagine",
  "InsertTable"		: "Inserisci/Modifica tabella",
  "InsertLine"		: "Inserisci linea orizzontale",
  "InsertSpecialChar"	: "Inserisci carattere speciale",
  "InsertSmiley"		: "Inserisci emoticon",
  "About"				: "Informazioni su FCKeditor",
  
  "Bold"				: "Grassetto",
  "Italic"			: "Corsivo",
  "Underline"			: "Sottolinea",
  "StrikeThrough"		: "Barrato",
  "Subscript"			: "Pedice",
  "Superscript"		: "Apice",
  "LeftJustify"		: "Allinea a sinistra",
  "CenterJustify"		: "Centra",
  "RightJustify"		: "Allinea a destra",
  "BlockJustify"		: "Giustifica",
  "DecreaseIndent"	: "Aumenta rientro",
  "IncreaseIndent"	: "Riduci rientro",
  "Undo"				: "Annulla",
  "Redo"				: "Ripeti",
  "NumberedList"		: "Elenco numerato",
  "BulletedList"		: "Elenco puntato",
  
  "ShowTableBorders"	: "Mostra i bordi delle tabelle",
  "ShowDetails"		: "Mostra dettagli",
  
  "FontStyle"			: "Stile",
  "FontFormat"		: "Formato",
  "Font"				: "Font",
  "FontSize"			: "Dimensione",
  "TextColor"			: "Colore del testo",
  "BGColor"			: "Colore dello sfondo",
  "Source"			: "Sorgente",
  
  // Context Menu
  
  "EditLink"			: "Modifica link",
  "InsertRow"			: "Aggiungi righa",
  "DeleteRows"		: "Elimina righa",
  "InsertColumn"		: "Aggiungi colonna",
  "DeleteColumns"		: "Elimina colonna",
  "InsertCell"		: "Aggiungi cella",
  "DeleteCells"		: "Elimina cella",
  "MergeCells"		: "Unisci celle",
  "SplitCell"			: "Dividi cella",
  "CellProperties"	: "Proprietà della cella",
  "TableProperties"	: "Proprietà della tabella",
  "ImageProperties"	: "Proprietà dell'immagine",
  
  // Alerts and Messages
  
  "ProcessingXHTML"	: "Elaborazione del XHTML. Attendere prego...",
  "Done"				: "Completata",
  "PasteWordConfirm"	: "Il testo da incollare sembra provenire da Word. Desidera pulirlo prima di incollare?",
  "NotCompatiblePaste": "Questa funzione è disponibile soltanto sui browser Internet Explorer versione 5.5 in poi. Desidera incollare il testo senza pulirlo?",
  
  // Dialogs
  "DlgBtnOK"			: "OK",
  "DlgBtnCancel"		: "Annulla",
  "DlgBtnClose"		: "Chiudi",
  
  // Image Dialog
  "DlgImgTitleInsert"	: "Inserisci immagine",
  "DlgImgTitleEdit"	: "Modifica immagine",
  "DlgImgBtnUpload"	: "Invia al server",
  "DlgImgURL"			: "Indirizzo (URL)",
  "DlgImgUpload"		: "Upload",
  "DlgImgBtnBrowse"	: "Cerca sul server",
  "DlgImgAlt"			: "Testo alternativo",
  "DlgImgWidth"		: "Larghezza",
  "DlgImgHeight"		: "Altezza",
  "DlgImgLockRatio"	: "Blocca proporzioni",
  "DlgBtnResetSize"	: "Reimposta dimensioni",
  "DlgImgBorder"		: "Bordo",
  "DlgImgHSpace"		: "HSpace",
  "DlgImgVSpace"		: "VSpace",
  "DlgImgAlign"		: "Allineamento",
  "DlgImgAlignLeft"	: "Sinistra",
  "DlgImgAlignAbsBottom"	: "Abs in basso",
  "DlgImgAlignAbsMiddle"	: "Abs in mezzo",
  "DlgImgAlignBaseline"	: "Linea base",
  "DlgImgAlignBottom"	: "In basso",
  "DlgImgAlignMiddle"	: "In mezzo",
  "DlgImgAlignRight"	: "Destra",
  "DlgImgAlignTextTop": "Top testo",
  "DlgImgAlignTop"	: "In alto",
  "DlgImgPreview"		: "Anteprima",
  "DlgImgMsgWrongExt"	: "Sono consentiti soltanto i seguenti tipi di file:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperazione annullata.",
  "DlgImgAlertSelect"	: "Selezionare il file da fare upload.",
  
  // Link Dialog
  "DlgLnkWindowTitle"	: "Link",
  "DlgLnkURL"			: "Indirizzo (URL)",
  "DlgLnkUpload"		: "Upload",
  "DlgLnkTarget"		: "Destinazione",
  "DlgLnkTargetNotSet": "<Non impostata>",
  "DlgLnkTargetBlank"	: "Nuova finestra (_blank)",
  "DlgLnkTargetParent": "Finestra padre (_parent)",
  "DlgLnkTargetSelf"	: "Stessa finestra (_self)",
  "DlgLnkTargetTop"	: "Finestra superiore (_top)",
  "DlgLnkTitle"		: "Titolo",
  "DlgLnkBtnUpload"	: "Invia al server",
  "DlgLnkBtnBrowse"	: "Cerca sul server",
  "DlgLnkMsgWrongExtA": "Sono consentiti soltanto i seguenti tipi di file:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperazione annullata.",
  "DlgLnkMsgWrongExtD": "Non sono consentiti i seguenti tipi di file:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperazione annullata.",
  
  // Color Dialog
  "DlgColorTitle"		: "Seleziona il colore",
  "DlgColorBtnClear"	: "Pulisci",
  "DlgColorHighlight"	: "Attivo",
  "DlgColorSelected"	: "Selezionato",
  
  // Smiley Dialog
  "DlgSmileyTitle"	: "Inserisci emoticon",
  
  // Special Character Dialog
  "DlgSpecialCharTitle"	: "Inserisci carattere speciale",
  
  // Table Dialog
  "DlgTableTitleInsert"	: "Inserisci tabella",
  "DlgTableTitleEdit"	: "Modifica tabella",
  "DlgTableRows"		: "Righe",
  "DlgTableColumns"	: "Colonne",
  "DlgTableBorder"	: "Bordo",
  "DlgTableAlign"		: "Allineamento",
  "DlgTableAlignNotSet"	: "<Non impostato>",
  "DlgTableAlignLeft"	: "Sinistra",
  "DlgTableAlignCenter"	: "Centrato",
  "DlgTableAlignRight": "Destra",
  "DlgTableWidth"		: "Larghezza",
  "DlgTableHeight"	: "Altezza",
  "DlgTableCellSpace"	: "Spazio celle",
  "DlgTableCellPad"	: "Margini celle",
  "DlgTableCaption"	: "Etichetta",
  "DlgTableWidthPx"	: "pixels",
  "DlgTableWidthPc"	: "percento",
  
  // Table Cell Dialog
  "DlgCellTitle"		: "Proprietà della cella",
  "DlgCellWidth"		: "Larghezza",
  "DlgCellWidthPx"	: "pixels",
  "DlgCellWidthPc"	: "percento",
  "DlgCellHeight"		: "Altezza",
  "DlgCellWordWrap"	: "Vai a capo",
  "DlgCellWordWrapNotSet"	: "<Default>",
  "DlgCellWordWrapYes": "Sì",
  "DlgCellWordWrapNo"	: "No",
  "DlgCellHorAlign"	: "Allineamento orizzontale",
  "DlgCellHorAlignNotSet"	: "<Non impostato>",
  "DlgCellHorAlignLeft"	: "Sinistra",
  "DlgCellHorAlignCenter"	: "Centrato",
  "DlgCellHorAlignRight"	: "Destra",
  "DlgCellVerAlign"	: "Allineamento verticale",
  "DlgCellVerAlignNotSet"	: "<Non impostato>",
  "DlgCellVerAlignTop"	: "Sopra",
  "DlgCellVerAlignMiddle"	: "In mezzo",
  "DlgCellVerAlignBottom"	: "Sotto",
  "DlgCellVerAlignBaseline"	: "Linea base",
  "DlgCellRowSpan"	: "Row span",
  "DlgCellCollSpan"	: "Coll span",
  "DlgCellBackColor"	: "Colore di sfondo",
  "DlgCellBorderColor": "Colore del bordo",
  "DlgCellBtnSelect"	: "Seleziona...",
  
  // About Dialog
  "DlgAboutVersion"	: "versione",
  "DlgAboutLicense"	: "Rilasciato sotto la licensa GNU Lesser General Public License",
  "DlgAboutInfo"		: "Per maggiori informazioni visitare"
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/lang/ko.js
  
  Index: ko.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: en.js
   * 	English language file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  var FCKLang =
  {
  // Language direction : "ltr" (left to right) or "rtl" (right to left).
  "Dir"				: "ltr",
  
  // Toolbar Items and Context Menu
  "Cut"				: "잘라내기" ,
  "Copy"				: "복사" ,
  "Paste"				: "붙여넣기" ,
  "PasteText"			: "텍스트로 붙여넣기" ,
  "PasteWord"			: "오피스 붙여넣기" ,
  "Find"				: "찾기" ,
  "SelectAll"			: "전체선택" ,
  "RemoveFormat"		: "꾸밈제거" ,
  "InsertLink"		: "링크 넣기/수정" ,
  "RemoveLink"		: "링크 수정" ,
  "InsertImage"		: "이미지 넣기/수정" ,
  "InsertTable"		: "표 넣기/수정" ,
  "InsertLine"		: "가로선 넣기/수정" ,
  "InsertSpecialChar"	: "특수문자" ,
  "InsertSmiley"		: "이모티콘" ,
  "About"				: "About FCKeditor" ,
  "Bold"				: "굵게" ,
  "Italic"			: "기울임" ,
  "Underline"			: "밑줄" ,
  "StrikeThrough"		: "취소선" ,
  "Subscript"			: "아래첨자" ,
  "Superscript"		: "위첨자" ,
  "LeftJustify"		: "왼쪽정렬" ,
  "CenterJustify"		: "가운데정렬" ,
  "RightJustify"		: "오른쪽정렬" ,
  "BlockJustify"		: "양쪽정렬" ,
  "DecreaseIndent"	: "내어쓰기" ,
  "IncreaseIndent"	: "들여쓰기" ,
  "Undo"				: "되돌리기" ,
  "Redo"				: "다시실행" ,
  "NumberedList"		: "문단번호" ,
  "BulletedList"		: "글머리표" ,
  "ShowTableBorders"	: "표 테두리 보임" ,
  "ShowDetails"		: "문단부호 표시" ,
  "FontStyle"			: "스타일" ,
  "FontFormat"		: "글꼴포멧" ,
  "Font"				: "글꼴" ,
  "FontSize"			: "크기" ,
  "TextColor"			: "글자색상" ,
  "BGColor"			: "배경색상" ,
  "Source"			: "소스" ,
  
  // Context Menu
  "EditLink"			: "링크수정" ,
  "InsertRow"			: "행 삽입" ,
  "DeleteRows"		: "행 삭제" ,
  "InsertColumn"		: "열 삽입" ,
  "DeleteColumns"		: "열 삭제" ,
  "InsertCell"		: "셀 삽입" ,
  "DeleteCells"		: "셀 삭제" ,
  "MergeCells"		: "셀 병합" ,
  "SplitCell"			: "셀 나누기" ,
  "CellProperties"	: "셀 속성" ,
  "TableProperties"	: "표 속성" ,
  "ImageProperties"	: "그림 속성" ,
  
  // Alerts and Messages
  "ProcessingXHTML"	: "XHTML 처리중. 잠시만 기다리세요..." ,
  "Done"				: "완료" ,
  "PasteWordConfirm"	: "[MS 오피스로부터 붙여넣기] 불필요한 태그를 제거할까요?" ,
  "NotCompatiblePaste": "이 명령은 Internet Explorer version 5.5 이상에서만 동작합니다. 태그제거 없이 붙여넣을까요?" ,
  
  // Dialogs
  "DlgBtnOK"			: "확인" ,
  "DlgBtnCancel"		: "취소" ,
  "DlgBtnClose"		: "닫기" ,
  
  // Image Dialog
  "DlgImgTitleInsert"	: "그림 삽입" ,
  "DlgImgTitleEdit"	: "그림 편집" ,
  "DlgImgBtnUpload"	: "서버로 전송" ,
  "DlgImgURL"			: "URL" ,
  "DlgImgUpload"		: "업로드" ,
  "DlgImgBtnBrowse"	: "이미지탐색기" ,
  "DlgImgAlt"			: "툴팁 텍스트" ,
  "DlgImgWidth"		: "넓이" ,
  "DlgImgHeight"		: "높이" ,
  "DlgImgLockRatio"	: "비율유지" ,
  "DlgBtnResetSize"	: "크기 초기화" ,
  "DlgImgBorder"		: "테두리" ,
  "DlgImgHSpace"		: "좌우여백" ,
  "DlgImgVSpace"		: "상하여백" ,
  "DlgImgAlign"			: "정렬" ,
  "DlgImgAlignLeft"		: "Left" ,
  "DlgImgAlignAbsBottom"	: "Abs Bottom" ,
  "DlgImgAlignAbsMiddle"	: "Abs Middle" ,
  "DlgImgAlignBaseline"	: "Baseline" ,
  "DlgImgAlignBottom"	: "Bottom" ,
  "DlgImgAlignMiddle"	: "Middle" ,
  "DlgImgAlignRight"	: "Right" ,
  "DlgImgAlignTextTop": "Text Top" ,
  "DlgImgAlignTop"	: "Top" ,
  "DlgImgPreview"		: "미리보기" ,
  "DlgImgMsgWrongExt"	: "[알림] 업로드 가능한 확장자가 아닙니다.\n\n업로드가능:" + FCKConfig.ImageUploadAllowedExtensions + "\n\n작업이 취소되었습니다." ,
  "DlgImgAlertSelect"	: "업로드할 이미지를 선택하세요" ,
  
  // Link Dialog
  "DlgLnkWindowTitle"	: "링크" ,
  "DlgLnkURL"			: "URL" ,
  "DlgLnkUpload"		: "업로드" ,
  "DlgLnkTarget"		: "Target" ,
  "DlgLnkTargetNotSet": "<기본값>" ,
  "DlgLnkTargetBlank"	: "새창 (_blank)" ,
  "DlgLnkTargetParent": "부모창 (_parent)" ,
  "DlgLnkTargetSelf"	: "현재창 (_self)" ,
  "DlgLnkTargetTop"	: "최상위창 (_top)" ,
  "DlgLnkTitle"		: "제목" ,
  "DlgLnkBtnUpload"	: "서버로 전송" ,
  "DlgLnkBtnBrowse"	: "탐색기" ,
  "DlgLnkMsgWrongExtA": "Sorry, only the following file types uploads are allowed:\n\n" + FCKConfig.LinkUploadAllowedExtensions + "\n\nOperation canceled." ,
  "DlgLnkMsgWrongExtD": "Sorry, the following file types uploads are not allowed:\n\n" + FCKConfig.LinkUploadDeniedExtensions + "\n\nOperation canceled." ,
  
  // Color Dialog
  "DlgColorTitle"		: "색상 선택" ,
  "DlgColorBtnClear"	: "Clear" ,
  "DlgColorHighlight"	: "Highlight" ,
  "DlgColorSelected"	: "Selected" ,
  
  // Smiley Dialog
  "DlgSmileyTitle"	: "이모티콘 넣기" ,
  
  // Special Character Dialog
  "DlgSpecialCharTitle"	: "특수문자 넣기" ,
  
  // Table Dialog
  "DlgTableTitleInsert"	: "표 삽입" ,
  "DlgTableTitleEdit"		: "표 편집" ,
  "DlgTableRows"			: "줄수" ,
  "DlgTableColumns"		: "칸수" ,
  "DlgTableBorder"		: "테두리 굵기" ,
  "DlgTableAlign"			: "표 정렬" ,
  "DlgTableAlignNotSet"	: "<기본값>" ,
  "DlgTableAlignLeft"		: "왼쪽" ,
  "DlgTableAlignCenter"	: "가운데" ,
  "DlgTableAlignRight"	: "오른쪽" ,
  "DlgTableWidth"			: "넓이" ,
  "DlgTableWidthPx"		: "px" ,
  "DlgTableWidthPc"		: "%" ,
  "DlgTableHeight"		: "높이" ,
  "DlgTableCellSpace"		: "Cell spacing" ,
  "DlgTableCellPad"		: "Cell padding" ,
  "DlgTableCaption"		: "Caption" ,
  
  // Table Cell Dialog
  "DlgCellTitle"			: "셀 속성" ,
  "DlgCellWidth"			: "넓이" ,
  "DlgCellWidthPx"		: "픽셀" ,
  "DlgCellWidthPc"		: "퍼센트" ,
  "DlgCellHeight"			: "높이" ,
  "DlgCellWordWrap"		: "Word Wrap" ,
  "DlgCellWordWrapNotSet"	: "<기본값>" ,
  "DlgCellWordWrapYes"	: "예" ,
  "DlgCellWordWrapNo"		: "아니오" ,
  "DlgCellHorAlign"		: "Horizontal Alignment" ,
  "DlgCellHorAlignNotSet"	: "<기본값>" ,
  "DlgCellHorAlignLeft"	: "왼쪽" ,
  "DlgCellHorAlignCenter"	: "가운데" ,
  "DlgCellHorAlignRight"	: "오른쪽" ,
  "DlgCellVerAlign"		: "Vertical Alignment" ,
  "DlgCellVerAlignNotSet"	: "<기본값>" ,
  "DlgCellVerAlignTop"	: "위" ,
  "DlgCellVerAlignMiddle"	: "중앙" ,
  "DlgCellVerAlignBottom"	: "아래" ,
  "DlgCellVerAlignBaseline"	: "기준선" ,
  "DlgCellRowSpan"		: "Rows Span" ,
  "DlgCellCollSpan"		: "Columns Span" ,
  "DlgCellBackColor"		: "Background Color" ,
  "DlgCellBorderColor"	: "Border Color" ,
  "DlgCellBtnSelect"		: "선택" ,
  
  // About Dialog
  "DlgAboutVersion"	: "버전" ,
  "DlgAboutLicense"	: "Licensed under the terms of the GNU Lesser General Public License" ,
  "DlgAboutInfo"		: "For further information go to"
  }
  
  
  
  
  1.1                  siminweb/util/fckeditor/editor/lang/pt-br.js
  
  Index: pt-br.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: pt-br.js
   * 	Portuguese language file.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-06-04 09:28:44
   * 
   * File Authors:
   * 		Alexandre Mendonça Lima (amlima@unitech.com.br)
   */
  
  var FCKLang =
  {
  // Language direction : "ltr" (left to right) or "rtl" (right to left).
  "Dir"				: "ltr",
  
  // Toolbar Items and Context Menu
  "Cut"				: "Recortar" ,
  "Copy"				: "Copiar" ,
  "Paste"				: "Colar" ,
  "PasteText"			: "Colar como Texto Puro" ,
  "PasteWord"			: "Colar do Microsoft Word" ,
  "Find"				: "Localizar" ,
  "SelectAll"			: "Selecionar Tudo" ,
  "RemoveFormat"		: "Remover Formatação" ,
  "InsertLink"		: "Inserir/Editar Link" ,
  "RemoveLink"		: "Remover Link" ,
  "InsertImage"		: "Inserir/Editar Imagem" ,
  "InsertTable"		: "Inserir/Editar Tabela" ,
  "InsertLine"		: "Inserir Linha Horizontal" ,
  "InsertSpecialChar"	: "Inserir Caracter Especial" ,
  "InsertSmiley"		: "Inserir Carinha" ,
  "About"				: "About FCKeditor" ,
  "Bold"				: "Negrito" ,
  "Italic"			: "Itálico" ,
  "Underline"			: "Sublinhado" ,
  "StrikeThrough"		: "Riscado" ,
  "Subscript"			: "Subscrito" ,
  "Superscript"		: "Superscrito" ,
  "LeftJustify"		: "Alinhamento à Esquerda" ,
  "CenterJustify"		: "Alinhamento ao Centro" ,
  "RightJustify"		: "Alinhamento à Direita" ,
  "BlockJustify"		: "Alinhamento Justificado" ,
  "DecreaseIndent"	: "Diminuir Identação" ,
  "IncreaseIndent"	: "Aumentar Identação" ,
  "Undo"				: "Desfazer" ,
  "Redo"				: "Refazer" ,
  "NumberedList"		: "Lista Numerada" ,
  "BulletedList"		: "Lista Marcada" ,
  "ShowTableBorders"	: "Exibir Bordas da Tabela" ,
  "ShowDetails"		: "Exibir Detalhes" ,
  "FontStyle"			: "Estilo da Fonte" ,
  "FontFormat"		: "Formatação da Fonte" ,
  "Font"				: "Fonte" ,
  "FontSize"			: "Tamanho da Fonte" ,
  "TextColor"			: "Cor do Texto" ,
  "BGColor"			: "Cor do Fundo do Texto" ,
  "Source"			: "Código-Fonte" ,
  
  // Context Menu
  "EditLink"			: "Editar Link" ,
  "InsertRow"			: "Inserir Linha" ,
  "DeleteRows"		: "Apagar Linhas" ,
  "InsertColumn"		: "Inserir Coluna" ,
  "DeleteColumns"		: "Apagar Colunas" ,
  "InsertCell"		: "Inserir células" ,
  "DeleteCells"		: "Apagar células" ,
  "MergeCells"		: "Mesclar células" ,
  "SplitCell"			: "Dividir célula" ,
  "CellProperties"	: "Propriedades da Célula" ,
  "TableProperties"	: "Propriedades da Tabela" ,
  "ImageProperties"	: "Propriedades da Imagem" ,
  
  // Alerts and Messages
  "ProcessingXHTML"	: "Processando XHTML. Por favor, aguarde..." ,
  "Done"				: "Concluído" ,
  "PasteWordConfirm"	: "O texto que você quer colar parece ser copiado do Microsoft Word. Deseja limpar formatação antes de colar?" ,
  "NotCompatiblePaste": "Este comando está disponível para Internet Explorer 5.5 ou superior. Deseja colar sem formatação?" ,
  
  // Dialogs
  "DlgBtnOK"			: "OK" ,
  "DlgBtnCancel"		: "Cancelar" ,
  "DlgBtnClose"		: "Fechar" ,
  
  // Image Dialog
  "DlgImgTitleInsert"	: "Inserir Imagem" ,
  "DlgImgTitleEdit"	: "Editar Imagem" ,
  "DlgImgBtnUpload"	: "Enviar para o servidor" ,
  "DlgImgURL"			: "URL" ,
  "DlgImgUpload"		: "Enviar" ,
  "DlgImgBtnBrowse"	: "Navegar no Servidor" ,
  "DlgImgAlt"			: "Texto Alternativo" ,
  "DlgImgWidth"		: "Largura" ,
  "DlgImgHeight"		: "Altura" ,
  "DlgImgLockRatio"	: "Travar Proporção" ,
  "DlgBtnResetSize"	: "Tamanho Padrão" ,
  "DlgImgBorder"		: "Borda" ,
  "DlgImgHSpace"		: "Espaçamento Horizontal" ,
  "DlgImgVSpace"		: "Espaçamento Vertical" ,
  "DlgImgAlign"			: "Alinhamento" ,
  "DlgImgAlignLeft"		: "Esquerda" ,
  "DlgImgAlignAbsBottom"	: "Abaixo Absoluto" ,
  "DlgImgAlignAbsMiddle"	: "Meio Absoluto" ,
  "DlgImgAlignBaseline"	: "Linha de Base" ,
  "DlgImgAlignBottom"	: "Abaixo" ,
  "DlgImgAlignMiddle"	: "Meio" ,
  "DlgImgAlignRight"	: "Direita" ,
  "DlgImgAlignTextTop": "Topo do Texto" ,
  "DlgImgAlignTop"	: "Topo" ,
  "DlgImgPreview"		: "Prever Imagem" ,
  "DlgImgMsgWrongExt"	: "Infelizmente, somente o envio dos seguintes tipos de arquivos são permitidos:\n\n" + FCKConfig.ImageUploadAllowedExtensions + "\n\nOperação cancelada." ,
  "DlgImgAlertSelect"	: "Por favor, selecione uma imagem para enviar." ,
  
  // Link Dialog
  "DlgLnkWindowTitle"	: "Link" ,
  "DlgLnkURL"			: "URL" ,
  "DlgLnkUpload"		: "Enviar" ,
  "DlgLnkTarget"		: "Alvo" ,
  "DlgLnkTargetNotSet": "<nenhum>" ,
  "DlgLnkTargetBlank"	: "Nova Janela (_blank)" ,
  "DlgLnkTargetParent": "Janela Pai (_parent)" ,
  "DlgLnkTargetSelf"	: "Mesma Janela (_self)" ,
  "DlgLnkTargetTop"	: "Janela superiora (_top)" ,
  "DlgLnkTitle"		: "Título" ,
  "DlgLnkBtnUpload"	: "Enviar para o Servidor" ,
  "DlgLnkBtnBrowse"	: "Navegar no Servidor" ,
  "DlgLnkMsgWrongExtA": "Infelizmente, somente o envio dos seguintes tipos de arquivos são permitidos:\n\n" + FCKConfig.LinkUploadAllowedExtensions + "\n\nOperação cancelada." ,
  "DlgLnkMsgWrongExtD": "Infelizmente, somente o envio dos seguintes tipos de arquivos são permitidos:\n\n" + FCKConfig.LinkUploadDeniedExtensions + "\n\nOperação cancelada." ,
  
  // Color Dialog
  "DlgColorTitle"		: "Selecionar Cor" ,
  "DlgColorBtnClear"	: "Limpar" ,
  "DlgColorHighlight"	: "Destacar" ,
  "DlgColorSelected"	: "Selecionado" ,
  
  // Smiley Dialog
  "DlgSmileyTitle"	: "Inserir uma Carinha" ,
  
  // Special Character Dialog
  "DlgSpecialCharTitle"	: "Inserir Caracter Especial" ,
  
  // Table Dialog
  "DlgTableTitleInsert"	: "Inserir Tabela" ,
  "DlgTableTitleEdit"		: "Editar Tabela" ,
  "DlgTableRows"			: "Linhas" ,
  "DlgTableColumns"		: "Colunas" ,
  "DlgTableBorder"		: "Tamanho da Borda" ,
  "DlgTableAlign"			: "Alinhamento" ,
  "DlgTableAlignNotSet"	: "<nenhum>" ,
  "DlgTableAlignLeft"		: "Esquerda" ,
  "DlgTableAlignCenter"	: "Centro" ,
  "DlgTableAlignRight"	: "Direita" ,
  "DlgTableWidth"			: "Largura" ,
  "DlgTableWidthPx"		: "pixels" ,
  "DlgTableWidthPc"		: "porcentagem" ,
  "DlgTableHeight"		: "Altura" ,
  "DlgTableCellSpace"		: "Espaçamento da Célula" ,
  "DlgTableCellPad"		: "Padding da Célula" ,
  "DlgTableCaption"		: "Cabeçalho" ,
  
  // Table Cell Dialog
  "DlgCellTitle"			: "Propriedades da Célula" ,
  "DlgCellWidth"			: "Largura" ,
  "DlgCellWidthPx"		: "pixels" ,
  "DlgCellWidthPc"		: "porcentagem" ,
  "DlgCellHeight"			: "Altura" ,
  "DlgCellWordWrap"		: "Quebrar Texto" ,
  "DlgCellWordWrapNotSet"	: "<nenhum>" ,
  "DlgCellWordWrapYes"	: "Sim" ,
  "DlgCellWordWrapNo"		: "Não" ,
  "DlgCellHorAlign"		: "Alinhamento Horizontal" ,
  "DlgCellHorAlignNotSet"	: "<nenhum>" ,
  "DlgCellHorAlignLeft"	: "Esquerda" ,
  "DlgCellHorAlignCenter"	: "Centro" ,
  "DlgCellHorAlignRight"	: "Direita" ,
  "DlgCellVerAlign"		: "Alinhamento Vertical" ,
  "DlgCellVerAlignNotSet"	: "<nenhum>" ,
  "DlgCellVerAlignTop"	: "Topo" ,
  "DlgCellVerAlignMiddle"	: "Meio" ,
  "DlgCellVerAlignBottom"	: "Abaixo" ,
  "DlgCellVerAlignBaseline"	: "Linha de Base" ,
  "DlgCellRowSpan"		: "Rows Span" ,
  "DlgCellCollSpan"		: "Columns Span" ,
  "DlgCellBackColor"		: "Cor do Fundo da Célula" ,
  "DlgCellBorderColor"	: "Cor da Borda" ,
  "DlgCellBtnSelect"		: "Selecionar..." ,
  
  // About Dialog
  "DlgAboutVersion"	: "versão" ,
  "DlgAboutLicense"	: "Licenciado sob os termos da Licença Geral Pública GNU" ,
  "DlgAboutInfo"		: "Para maiores informações, vá para "
  }
  
  
  
  


comfuture    04/11/24 21:25:27

  Added:       util/fckeditor/editor/skins/default fck_contextmenu.css
                        fck_dialog.css fck_editor.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/default/fck_contextmenu.css
  
  Index: fck_contextmenu.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_contextmenu.css
   * 	Styles used by the context menu and panels.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 16:19:52
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  .CM_ContextMenu, .CM_ContextMenu *
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .CM_ContextMenu
  {
  	border: 1px solid #8f8f73;
  	padding: 2px;
  	background-color: #ffffff;
  }
  
  .CM_Option, .CM_Over, .CM_Disabled
  {
  	padding: 0px 3px;
  	height: 18px;
  	cursor: default;
  }
  
  .CM_Option, .CM_Over
  {
  	cursor: hand;
  }
  
  .CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
  {
  	background-color: #e3e3c7;
  }
  
  .CM_Option .CM_Icon IMG
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .CM_Option .CM_Label, .CM_Over .CM_Label
  {
  	padding: 1px 10px 1px 3px;
  }
  
  .CM_Over
  {
  	color: #fff;
  	background-color: #8f8f73;
  }
  
  .CM_Over .CM_Icon
  {
  	background-color: #737357;
  }
  
  .CM_Separator TD
  {
  	height: 3px;
  }
  
  .CM_Separator .CM_Label DIV
  {
  	border-top: #b9b99d 1px solid;
  	margin-left: 2px;
  	margin-right: 3px;
  }
  
  /*
  	### Panel Styles
  */
  
  .FCK_Panel
  {
  	border: #8f8f73 1px solid;
  	float: left;
  	padding: 2px;
  	background-color: #ffffff;
  	position: absolute ;
  }
  
  .FCK_Panel, .FCK_Panel TD
  {
  	font-family: 'Microsoft Sans Serif', Tahoma, Arial, Verdana, Sans-Serif;
  	font-size: 11px;
  }
  
  /*
  	### Color Selector Panel
  */
  
  .ColorBoxBorder
  {
  	border: #808080 1px solid;
  	clear: none;
  	position: static;
  }
  
  .ColorBox
  {
  	clear: none;
  	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;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/fck_dialog.css
  
  Index: fck_dialog.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_dialog.css
   * 	Styles used by the dialog boxes.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body
  {
  	margin: 0px;
  	padding: 10px;
  	background-color: #f1f1e3;
  }
  
  body, td, input, select, textarea
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
  }
  
  .PopupBody
  {
  	margin: 0px;
  	padding: 0px;
  }
  
  .PopupTitle
  {
  	font-weight: bold;
  	font-size: 14pt;
  	color: #737357;
  	background-color: #e3e3c7;
  	padding: 3px 10px 3px 10px;
  }
  
  .PopupButtons
  {
  	border-top: #d5d59d 1px solid;
  	background-color: #e3e3c7;
  	padding: 7px 10px 7px 10px;
  }
  
  .Button
  {
  	border-right: #737357 1px solid;
  	border-top: #737357 1px solid;
  	border-left: #737357 1px solid;
  	color: #3b3b1f;
  	border-bottom: #737357 1px solid;
  	background-color: #c7c78f;
  }
  
  .DarkBackground
  {
  	background-color: #d7d79f;
  }
  
  .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-right: 5px;
  	padding-left: 5px;
  	padding-bottom: 3px;
  	padding-top: 3px;
  	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;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/fck_editor.css
  
  Index: fck_editor.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_editor.css
   * 	Styles used by the editor IFRAME and Toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-20 13:53:25
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  /*@import url( fck_contextmenu.css ) ;*/
  
  /*
  	### Basic Editor IFRAME Styles.
  */
  
  body
  {
  	padding: 1px 1px 1px 1px;
  	margin: 0px 0px 0px 0px;
  }
  
  #eEditorArea, .Source
  {
  	border: #696969 1px solid;
  }
  
  #eSourceField
  {
  	border: none;
  	padding: 5px;
  	font-family: Monospace;
  }
  
  /* 
  	### Toolbar Styles
  */
  
  .TB_ToolbarSet, .TB_Expand, .TB_Collapse
  {
  	background-color: #efefde;
  }
  
  .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_ToolbarSet
  {
  	border-top: #efefde 1px outset;
  	border-bottom: #efefde 1px outset;
  }
  
  .TB_ToolbarSet, .TB_ToolbarSet *
  {
  	font-size: 11px;
  	cursor: default;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .TB_Expand, .TB_Collapse
  {
  	padding: 2px 2px 2px 2px;
  	border: #efefde 1px outset;
  }
  
  .TB_Collapse
  {
  	border: #efefde 1px outset;
  	width: 5px;
  }
  
  .TB_Button_On, .TB_Button_Off, .TB_Button_Disabled, .TB_Combo_Off, .TB_Combo_Disabled
  {
  	border: #efefde 1px solid;
  	height: 21px;
  }
  
  .TB_Button_On
  {
  	border-color: #316ac5;
  	background-color: #c1d2ee;
  }
  
  .TB_Button_Off, .TB_Combo_Off
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .TB_Button_Disabled, .TB_Combo_Disabled
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .TB_Icon DIV
  {
  	width: 21px;
  	height: 21px;
  	background-position: 50% 50%;
  	background-repeat: no-repeat;
  }
  
  .TB_Text
  {
  	height: 21px;
  	padding-right: 5px;
  }
  
  .TB_ButtonArrow
  {
  	padding-right: 3px;
  }
  
  .TB_ButtonType_Icon .TB_Text
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Icon
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Text
  {
  	padding-left: 5px;
  }
  
  


comfuture    04/11/24 21:25:27

  Added:       util/fckeditor/editor/skins/default/images
                        toolbar.buttonarrow.gif toolbar.collapse.gif
                        toolbar.end.gif toolbar.expand.gif
                        toolbar.separator.gif toolbar.start.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.collapse.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.end.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.expand.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.separator.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/images/toolbar.start.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:27

  Added:       util/fckeditor/editor/skins/default/toolbar button.about.gif
                        button.bgcolor.gif button.bold.gif button.cell.gif
                        button.copy.gif button.cut.gif button.find.gif
                        button.image.gif button.indent.gif
                        button.inserthorizontalrule.gif
                        button.insertorderedlist.gif
                        button.insertunorderedlist.gif button.italic.gif
                        button.justifycenter.gif button.justifyfull.gif
                        button.justifyleft.gif button.justifyright.gif
                        button.link.gif button.newpage.gif
                        button.outdent.gif button.paste.gif
                        button.pastetext.gif button.pasteword.gif
                        button.preview.gif button.print.gif button.redo.gif
                        button.removeformat.gif button.save.gif
                        button.selectall.gif button.showdetails.gif
                        button.showtableborders.gif button.smiley.gif
                        button.source.gif button.specialchar.gif
                        button.spellcheck.gif button.strikethrough.gif
                        button.subscript.gif button.superscript.gif
                        button.table.gif button.tabledeletecells.gif
                        button.tabledeletecolumns.gif
                        button.tabledeleterows.gif
                        button.tableinsertcell.gif
                        button.tableinsertcolumn.gif
                        button.tableinsertrow.gif
                        button.tablemergecells.gif
                        button.tablesplitcell.gif button.textcolor.gif
                        button.underline.gif button.undo.gif
                        button.unlink.gif button.unorderedlist.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.about.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.bgcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.bold.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.cell.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.copy.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.cut.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.find.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.image.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.indent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.inserthorizontalrule.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.insertorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.insertunorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.italic.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.justifycenter.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.justifyfull.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.justifyleft.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.justifyright.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.link.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.newpage.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.outdent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.paste.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.pastetext.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.pasteword.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.preview.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.print.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.redo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.removeformat.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.save.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.selectall.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.showdetails.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.showtableborders.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.smiley.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.source.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.specialchar.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.spellcheck.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.strikethrough.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.subscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.superscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.table.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tabledeletecells.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tabledeletecolumns.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tabledeleterows.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tableinsertcell.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tableinsertcolumn.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tableinsertrow.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tablemergecells.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.tablesplitcell.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.textcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.underline.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.undo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.unlink.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/default/toolbar/button.unorderedlist.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:27

  Added:       util/fckeditor/editor/skins/office2003 fck_contextmenu.css
                        fck_dialog.css fck_editor.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/fck_contextmenu.css
  
  Index: fck_contextmenu.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_contextmenu.css
   * 	Styles used by the context menu.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  .CM_ContextMenu, .CM_ContextMenu *
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .CM_ContextMenu
  {
  	border: 1px solid #8f8f73;
  	padding: 2px;
  	background-color: #f7f8fd;
  }
  
  .CM_Option, .CM_Over, .CM_Disabled
  {
  	padding: 0px 3px;
  	height: 18px;
  	cursor: default;
  }
  
  .CM_Option, .CM_Over
  {
  	cursor: hand;
  }
  
  .CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
  {
  	background-color: #d6dff7;
  }
  
  .CM_Option .CM_Icon IMG
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .CM_Option .CM_Label, .CM_Over .CM_Label
  {
  	padding: 1px 10px 1px 3px;
  }
  
  .CM_Over
  {
  	color: #fff;
  	background-color: #7096FA;
  }
  
  .CM_Over .CM_Icon
  {
  	background-color: #466ca6;
  }
  
  .CM_Separator TD
  {
  	height: 3px;
  }
  
  .CM_Separator .CM_Label DIV
  {
  	border-top: #b9b99d 1px solid;
  	margin-left: 2px;
  	margin-right: 3px;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/fck_dialog.css
  
  Index: fck_dialog.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_dialog.css
   * 	Styles used by the dialog boxes.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body
  {
  	margin: 0px;
  	padding: 10px;
  	background-color: #f7f8fd;
  }
  
  body, td, input, select, textarea
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
  }
  
  .PopupBody
  {
  	margin: 0px;
  	padding: 0px;
  }
  
  .PopupTitle
  {
  	font-weight: bold;
  	font-size: 14pt;
  	color: #0e3460;
  	background-color: #8cb2fd;
  	padding: 3px 10px 3px 10px;
  }
  
  .PopupButtons
  {
  	border-top: #466ca6 1px solid;
  	background-color: #8cb2fd;
  	padding: 7px 10px 7px 10px;
  }
  
  .Button
  {
  	border: #1c3460 1px solid;
  	color: #000a28;
  	background-color: #7096d3;
  }
  
  .DarkBackground
  {
  	background-color: #d7d79f;
  }
  
  .LightBackground
  {
  	background-color: #ffffbe;
  }
  
  .PopupTitleBorder
  {
  	border-bottom: #d5d59d 1px solid;
  }
  
  .PopupTabArea
  {
  	color: #0e3460;
  	background-color: #8cb2fd;
  }
  
  .PopupTabEmptyArea
  {
  	padding-left: 10px ;
  	border-bottom: #466ca6 1px solid;
  }
  
  .PopupTab, .PopupTabSelected
  {
  	border-right: #466ca6 1px solid;
  	border-top: #466ca6 1px solid;
  	border-left: #466ca6 1px solid;
  	padding-right: 5px;
  	padding-left: 5px;
  	padding-bottom: 3px;
  	padding-top: 3px;
  	color: #0e3460;
  }
  
  .PopupTab
  {
  	margin-top: 1px;
  	border-bottom: #466ca6 1px solid;
  	cursor: pointer;
  	cursor: hand;
  }
  
  .PopupTabSelected
  {
  	font-weight:bold;
  	cursor: default;
  	padding-top: 4px;
  	border-bottom: #f7f8fd 1px solid;
  	background-color: #f7f8fd;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/fck_editor.css
  
  Index: fck_editor.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_editor.css
   * 	Styles used by the editor IFRAME and Toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:54
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   * 		Aziz Oraij (aziz@oraij.com)
   */
  
  @import url( fck_contextmenu.css ) ;
  
  /*
  	### Basic Editor IFRAME Styles.
  */
  
  body
  {
  	padding: 1px 1px 1px 1px;
  	margin: 0px 0px 0px 0px;
  }
  
  #eEditorArea, .Source
  {
  	border: #696969 1px solid;
  }
  
  #eSourceField
  {
  	border: none;
  	padding: 5px;
  	font-family: Monospace;
  }
  
  /* 
  	### Toolbar Styles
  */
  
  .TB_ToolbarSet, .TB_Expand, .TB_Collapse
  {
  	background-color: #f7f8fd;
  }
  
  .TB_Toolbar
  {
  	background-color: #d6dff7;
  	background-image: url(images/toolbar.bg.gif);
  	background-repeat: repeat-x;
  }
  
  .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_ToolbarSet
  {
  	border-top: #efefde 1px outset;
  	border-bottom: #efefde 1px outset;
  }
  
  .TB_ToolbarSet, .TB_ToolbarSet *
  {
  	font-size: 11px;
  	cursor: default;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .TB_Expand, .TB_Collapse
  {
  	padding: 2px 2px 2px 2px;
  	border: #efefde 1px outset;
  }
  
  .TB_Collapse
  {
  	border: #efefde 1px outset;
  	width: 5px;
  }
  
  .TB_Button_On, .TB_Button_Off, .TB_Button_Disabled, .TB_Combo_Off, .TB_Combo_Disabled
  {
  	border: #efefde 1px solid;
  	height: 21px;
  }
  
  .TB_Button_On
  {
  	border-color: #316ac5;
  	background-color: #c1d2ee;
  }
  
  .TB_Button_Off, .TB_Combo_Off
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .TB_Button_Disabled, .TB_Combo_Disabled
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .TB_Icon DIV
  {
  	width: 21px;
  	height: 21px;
  	background-position: 50% 50%;
  	background-repeat: no-repeat;
  }
  
  .TB_Text
  {
  	height: 21px;
  	padding-right: 5px;
  }
  
  .TB_ButtonType_Icon .TB_Text
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Icon
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Text
  {
  	padding-left: 5px;
  }
  
  


comfuture    04/11/24 21:25:28

  Added:       util/fckeditor/editor/skins/office2003/images toolbar.bg.gif
                        toolbar.collapse.gif toolbar.end.gif
                        toolbar.expand.gif toolbar.separator.gif
                        toolbar.start.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.bg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.end.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.expand.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.separator.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/images/toolbar.start.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:28

  Added:       util/fckeditor/editor/skins/office2003/toolbar
                        button.about.gif button.anchor.gif
                        button.bgcolor.gif button.bold.gif
                        button.button.gif button.checkbox.gif
                        button.copy.gif button.cut.gif button.find.gif
                        button.flash.gif button.fontstyleadv.gif
                        button.form.gif button.hidden.gif button.image.gif
                        button.imagebutton.gif button.indent.gif
                        button.input.gif button.inserthorizontalrule.gif
                        button.insertorderedlist.gif
                        button.insertunorderedlist.gif button.italic.gif
                        button.justifycenter.gif button.justifyfull.gif
                        button.justifyleft.gif button.justifyright.gif
                        button.link.gif button.mail.gif button.new.gif
                        button.newpage.gif button.open.gif
                        button.outdent.gif button.paste.gif
                        button.pastetext.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.about.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.anchor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.bgcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.bold.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.button.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.checkbox.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.copy.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.cut.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.find.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.flash.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.fontstyleadv.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.form.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.hidden.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.image.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.imagebutton.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.indent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.input.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.inserthorizontalrule.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.insertorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.insertunorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.italic.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.justifycenter.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.justifyfull.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.justifyleft.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.justifyright.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.link.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.mail.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.new.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.newpage.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.open.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.outdent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.paste.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.pastetext.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:31

  Added:       util/fckeditor/editor/skins/office2003/toolbar
                        button.pasteword.gif button.preview.gif
                        button.print.gif button.radio.gif button.redo.gif
                        button.removeformat.gif button.replace.gif
                        button.save.gif button.select.gif
                        button.selectall.gif button.showdetails.gif
                        button.showtableborders.gif button.smiley.gif
                        button.source.gif button.specialchar.gif
                        button.spellcheck.gif button.strikethrough.gif
                        button.subscript.gif button.superscript.gif
                        button.table.gif button.textarea.gif
                        button.textcolor.gif button.underline.gif
                        button.undo.gif button.universalkey.gif
                        button.unlink.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.pasteword.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.preview.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.print.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.radio.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.redo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.removeformat.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.replace.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.save.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.select.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.selectall.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.showdetails.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.showtableborders.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.smiley.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.source.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.specialchar.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.spellcheck.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.strikethrough.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.subscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.superscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.table.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.textarea.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.textcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.underline.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.undo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.universalkey.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/office2003/toolbar/button.unlink.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:31

  Added:       util/fckeditor/editor/skins/silver fck_contextmenu.css
                        fck_dialog.css fck_editor.css
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/silver/fck_contextmenu.css
  
  Index: fck_contextmenu.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_contextmenu.css
   * 	Styles used by the context menu.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:55
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  .CM_ContextMenu, .CM_ContextMenu *
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .CM_ContextMenu
  {
  	border: 1px solid #8f8f73;
  	padding: 2px;
  	background-color: #f7f7f7;
  }
  
  .CM_Option, .CM_Over, .CM_Disabled
  {
  	padding: 0px 3px;
  	height: 18px;
  	cursor: default;
  }
  
  .CM_Option, .CM_Over
  {
  	cursor: hand;
  }
  
  .CM_Option .CM_Icon, .CM_Disabled .CM_Icon, .CM_Separator .CM_Icon
  {
  	background-color: #dedede;
  }
  
  .CM_Option .CM_Icon IMG
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .CM_Disabled .CM_Icon IMG, .CM_Disabled .CM_Label
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .CM_Option .CM_Label, .CM_Over .CM_Label
  {
  	padding: 1px 10px 1px 3px;
  }
  
  .CM_Over
  {
  	color: #fff;
  	background-color: #8a857d;
  }
  
  .CM_Over .CM_Icon
  {
  	background-color: #6c6761;
  }
  
  .CM_Separator TD
  {
  	height: 3px;
  }
  
  .CM_Separator .CM_Label DIV
  {
  	border-top: #b9b99d 1px solid;
  	margin-left: 2px;
  	margin-right: 3px;
  }
  
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/fck_dialog.css
  
  Index: fck_dialog.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_dialog.css
   * 	Styles used by the dialog boxes.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:55
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  body
  {
  	margin: 0px;
  	padding: 10px;
  	background-color: #f7f7f7;
  }
  
  body, td, input, select, textarea
  {
  	font-size: 11px;
  	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
  }
  
  .PopupBody
  {
  	margin: 0px;
  	padding: 0px;
  }
  
  .PopupTitle
  {
  	padding-right: 10px;
  	padding-left: 10px;
  	font-weight: bold;
  	font-size: 14pt;
  	padding-bottom: 3px;
  	color: #504845;
  	padding-top: 3px;
  	background-color: #dedede;
  }
  
  .PopupButtons
  {
  	border-top: #cec6b5 1px solid;
  	background-color: #DEDEDE;
  	padding: 7px 10px 7px 10px;
  }
  
  .Button
  {
  	border: #7a7261 1px solid;
  	color: #504845;
  	background-color: #cec6b5;
  }
  
  .DarkBackground
  {
  	background-color: #d7d79f;
  }
  
  .LightBackground
  {
  	background-color: #ffffbe;
  }
  
  .PopupTitleBorder
  {
  	border-bottom: #cec6b5 1px solid;
  }
  
  .PopupTabArea
  {
  	color: #504845;
  	background-color: #DEDEDE;
  }
  
  .PopupTabEmptyArea
  {
  	padding-left: 10px ;
  	border-bottom: #cec6b5 1px solid;
  }
  
  .PopupTab, .PopupTabSelected
  {
  	border-right: #cec6b5 1px solid;
  	border-top: #cec6b5 1px solid;
  	border-left: #cec6b5 1px solid;
  	padding-right: 5px;
  	padding-left: 5px;
  	padding-bottom: 3px;
  	padding-top: 3px;
  	color: #504845;
  }
  
  .PopupTab
  {
  	margin-top: 1px;
  	border-bottom: #cec6b5 1px solid;
  	cursor: pointer;
  	cursor: hand;
  }
  
  .PopupTabSelected
  {
  	font-weight:bold;
  	cursor: default;
  	padding-top: 4px;
  	border-bottom: #f1f1e3 1px solid;
  	background-color: #f7f7f7;
  }
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/fck_editor.css
  
  Index: fck_editor.css
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fck_editor.css
   * 	Styles used by the editor IFRAME and Toolbar.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:55
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   * 		gazou[Fr]
   */
  
  @import url( fck_contextmenu.css ) ;
  
  /*
  	### Basic Editor IFRAME Styles.
  */
  
  body
  {
  	padding: 1px 1px 1px 1px;
  	margin: 0px 0px 0px 0px;
  }
  
  #eEditorArea, .Source
  {
  	border: #696969 1px solid;
  }
  
  #eSourceField
  {
  	border: none;
  	padding: 5px;
  	font-family: Monospace;
  }
  
  /* 
  	### Toolbar Styles
  */
  
  .TB_ToolbarSet, .TB_Expand, .TB_Collapse
  {
  	background-color: #f7f7f7;
  }
  
  .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_ToolbarSet
  {
  	padding: 1px;
  	border-top: #efefde 1px outset;
  	border-bottom: #efefde 1px outset;
  }
  
  .TB_ToolbarSet, .TB_ToolbarSet *
  {
  	font-size: 11px;
  	cursor: default;
  	font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
  }
  
  .TB_Expand, .TB_Collapse
  {
  	padding: 2px 2px 2px 2px;
  	border: #efefde 1px outset;
  }
  
  .TB_Collapse
  {
  	border: #efefde 1px outset;
  	width: 5px;
  }
  
  .TB_Button_On, .TB_Button_Off, .TB_Button_Disabled
  {
  	padding: 1px ;
  	margin: 1px ;
  	height: 21px;
  }
  
  .TB_Combo_Off, .TB_Combo_Disabled
  {
  	padding: 1px ;
  	margin: 2px ;
  	height: 21px;
  }
  
  .TB_Button_On, .TB_Button_Off, .TB_Button_Disabled
  {
  	border: #cec6b5 1px solid;
  }
  
  .TB_Button_On
  {
  	border-color: #316ac5;
  	background-color: #c1d2ee;
  }
  
  .TB_Button_Off
  {
  	background: #efefef url(images/toolbar.buttonbg.gif) repeat-x;
  }
  
  .TB_Button_Off, .TB_Combo_Off
  {
  	filter: alpha(opacity=70);
  	-moz-opacity: 0.70;
  }
  
  .TB_Button_Disabled, .TB_Combo_Disabled
  {
  	filter: gray() alpha(opacity=30);
  	-moz-opacity: 0.30;
  }
  
  .TB_Icon DIV
  {
  	width: 21px;
  	height: 21px;
  	background-position: 50% 50%;
  	background-repeat: no-repeat;
  }
  
  .TB_Text
  {
  	height: 21px;
  	padding-right: 5px;
  }
  
  .TB_ButtonType_Icon .TB_Text
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Icon
  {
  	display: none;
  }
  
  .TB_ButtonType_Text .TB_Text
  {
  	padding-left: 5px;
  }
  
  


comfuture    04/11/24 21:25:31

  Added:       util/fckeditor/editor/skins/silver/images
                        toolbar.buttonbg.gif toolbar.collapse.gif
                        toolbar.end.gif toolbar.expand.gif
                        toolbar.separator.gif toolbar.start.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.collapse.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.end.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.expand.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.separator.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/images/toolbar.start.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:32

  Added:       util/fckeditor/editor/skins/silver/toolbar button.about.gif
                        button.bgcolor.gif button.bold.gif button.copy.gif
                        button.cut.gif button.find.gif button.image.gif
                        button.indent.gif button.inserthorizontalrule.gif
                        button.insertorderedlist.gif
                        button.insertunorderedlist.gif button.italic.gif
                        button.justifycenter.gif button.justifyfull.gif
                        button.justifyleft.gif button.justifyright.gif
                        button.link.gif button.newpage.gif
                        button.outdent.gif button.paste.gif
                        button.pastetext.gif button.pasteword.gif
                        button.preview.gif button.print.gif button.redo.gif
                        button.removeformat.gif button.save.gif
                        button.selectall.gif button.showdetails.gif
                        button.showtableborders.gif button.smiley.gif
                        button.source.gif button.specialchar.gif
                        button.spellcheck.gif button.strikethrough.gif
                        button.subscript.gif button.superscript.gif
                        button.table.gif button.textcolor.gif
                        button.underline.gif button.undo.gif
                        button.unlink.gif button.unorderedlist.gif
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.about.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.bgcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.bold.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.copy.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.cut.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.find.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.image.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.indent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.inserthorizontalrule.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.insertorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.insertunorderedlist.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.italic.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.justifycenter.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.justifyfull.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.justifyleft.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.justifyright.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.link.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.newpage.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.outdent.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.paste.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.pastetext.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.pasteword.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.preview.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.print.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.redo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.removeformat.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.save.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.selectall.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.showdetails.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.showtableborders.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.smiley.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.source.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.specialchar.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.spellcheck.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.strikethrough.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.subscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.superscript.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.table.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.textcolor.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.underline.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.undo.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.unlink.gif
  
  	<<Binary file>>
  
  
  1.1                  siminweb/util/fckeditor/editor/skins/silver/toolbar/button.unorderedlist.gif
  
  	<<Binary file>>
  
  


comfuture    04/11/24 21:25:32

  Added:       util/fckeditor fckconfig.js fckeditor.cfc fckeditor.cfm
                        fckeditor.js license.txt
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/util/fckeditor/fckconfig.js
  
  Index: fckconfig.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckconfig.js
   * 	Editor configuration settings.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-08-30 23:27:01
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // Custom Configurations (leave blank to ignore)
  FCKConfig.CustomConfigurationsPath = '' ;	// '/fckeditor.config.js' ;
  
  // Enables the debug window
  FCKConfig.Debug = false ;
  
  // Set the path for the skin files to use.
  FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ;
  
  // Language settings
  FCKConfig.AutoDetectLanguage = true ;
  FCKConfig.DefaultLanguage    = "en" ;
  
  // Enable XHTML support
  FCKConfig.EnableXHTML		= true ;
  FCKConfig.EnableSourceXHTML	= true ;
  
  // Tells Gecko browsers to use SPAN instead of <B>, <I> and <U>.
  FCKConfig.GeckoUseSPAN = true ;
  
  // Force the editor to get the focus on startup (page load).
  FCKConfig.StartupFocus = true ;
  
  // Cut and Paste options
  FCKConfig.ForcePasteAsPlainText	= false ;
  
  // Link: Target Windows
  FCKConfig.LinkShowTargets = true ;
  FCKConfig.LinkTargets = '_blank;_parent;_self;_top' ;
  FCKConfig.LinkDefaultTarget = '' ;
  
  FCKConfig.ToolbarStartExpanded	= true ;
  FCKConfig.ToolbarCanCollapse	= true ;
  
  //##
  //## Toolbar Buttons Sets
  //##
  FCKConfig.ToolbarSets = new Object() ;
  FCKConfig.ToolbarSets["Default"] = [
  	['Source','-','Save','NewPage','Preview'],
  	['Cut','Copy','Paste','PasteText','PasteWord','-','Print'/*,'SpellCheck'*/],
  	['Undo','Redo',/*'-','Find','Replace',*/'-','SelectAll','RemoveFormat'],
  	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
  	['OrderedList','UnorderedList','-','Outdent','Indent'],
  	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
  	['Link','Unlink'/*,'Anchor'*/],
  	['Image','Table','Rule','SpecialChar'/*,'UniversalKey'*/,'Smiley'],
  	/*['Form','Checkbox','Radio','Input','Textarea','Select','Button','ImageButton','Hidden']*/
  	/*['ShowTableBorders','ShowDetails','-','Zoom'],*/
  	[/*'FontStyleAdv','-','FontStyle','-',*/'FontFormat','-','FontName','-','FontSize'],
  	['TextColor','BGColor'],
  	['About']
  ] ;
  FCKConfig.ToolbarSets["Basic"] = [
  	['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']
  ] ;
  
  // Font Colors
  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' ;
  
  // Font Names
  FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
  
  // Link Browsing
  FCKConfig.LinkBrowser = true ;
  FCKConfig.LinkBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Connector=connectors/aspx/connector.aspx" ;
  FCKConfig.LinkBrowserWindowWidth	= screen.width * 0.7 ;	// 70%
  FCKConfig.LinkBrowserWindowHeight	= screen.height * 0.7 ;	// 70%
  
  // Link Upload
  FCKConfig.LinkUpload = false ;
  FCKConfig.LinkUploadURL = FCKConfig.BasePath + "filemanager/upload/aspx/upload.aspx" ;
  FCKConfig.LinkUploadWindowWidth		= 300 ;
  FCKConfig.LinkUploadWindowHeight	= 150 ;
  FCKConfig.LinkUploadAllowedExtensions	= "*" ;		// * or empty for all
  FCKConfig.LinkUploadDeniedExtensions	= ".exe .asp .php .aspx .js .cfm .dll" ;	// empty for no one
  
  // Image Browsing
  FCKConfig.ImageBrowser = true ;
  FCKConfig.ImageBrowserURL = FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/aspx/connector.aspx" ;
  FCKConfig.ImageBrowserWindowWidth  = screen.width * 0.7 ;	// 70% ;
  FCKConfig.ImageBrowserWindowHeight = screen.height * 0.7 ;	// 70% ;
  
  // Smiley Dialog
  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 ;
  
  //**
  // Load the custom configurations file
  if ( FCKConfig.CustomConfigurationsPath.length > 0 )
  	FCKScriptLoader.AddScript( FCKConfig.CustomConfigurationsPath ) ;
  
  
  1.1                  siminweb/util/fckeditor/fckeditor.cfc
  
  Index: fckeditor.cfc
  ===================================================================
  <cfcomponent output="no" displayname="FCKEditor" hint="Create an instance of the FCKEditor.">
  <!---
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditor.cfc
   * 	ColdFusion MX integration. 
   * 	Note this CFC is created for use only with Coldfusion MX and above.
   * 	For older version, check the fckeditor.cfm.
   * 
   * 	Syntax: 
   * 
   * 	<cfscript>
   * 			fckEditor = createObject("component", "fckEditorV2/fckeditor");
   * 			fckEditor.instanceName="myEditor";
   * 			fckEditor.basePath="/fckEditorV2/";
   * 			fckEditor.value="This is my <strong>initial</strong> html text.";
   * 			fckEditor.width="100%";
   * 			fckEditor.height="200";
   * 	 	// ... additional parameters ...
   * 			fckEditor.create(); // create instance now.
   * 	</cfscript>
   * 
   * 	See your macromedia coldfusion mx documentation for more info.
   * 
   * 	*** Note: 
   * 	Do not use path names with a "." (dot) in the name. This is a coldfusion 
   * 	limitation with the cfc invocation.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-27 12:39:32
   * 
   * File Authors:
   * 		Hendrik Kramer (hk@lwd.de)
  --->
  <cffunction 
  	name="create" 
  	access="public" 
  	output="Yes" 
  	returntype="void" 
  	hint="Initialize the FCKEditor instance."
  >
  
  	<cfparam name="this.instanceName" type="string" />
  	<cfparam name="this.width" type="string" default="100%" />
  	<cfparam name="this.height" type="string" default="200" />
  	<cfparam name="this.toolbarSet" type="string" default="Default" />
  	<cfparam name="this.value" type="string" default="" />
  	<cfparam name="this.basePath" type="string" default="/fckeditor/" />
  	<cfparam name="this.checkBrowser" type="boolean" default="true" />
  	<cfparam name="this.config" type="struct" default="#structNew()#" />
  
  	<cfscript>
  		// display the html editor or a plain textarea?
  		if( isCompatibleBrowser() )
  			showHTMLEditor();
  		else
  			showTextArea();
  	</cfscript>
  
  </cffunction>
  
  <cffunction
  	name="isCompatibleBrowser"
  	access="private"
  	output="no"
  	returnType="boolean"
  	hint="Check browser compatibility via HTTP_USER_AGENT, if checkBrowser is true"
  >
  
  	<cfscript>
  		var sAgent = lCase( cgi.HTTP_USER_AGENT );
  		var stResult = "";
  		var sBrowserVersion = "";
  
  		// do not check if argument "checkBrowser" is false
  		if( not this.checkBrowser )
  			return true;
  
  		// check for Internet Explorer ( >= 5.5 )
  		if( find( "msie", sAgent ) and not find( "mac", sAgent ) and not find( "opera", sAgent ) )
  		{
  			// try to extract IE version
  			stResult = reFind( "msie ([5-9]\.[0-9])", sAgent, 1, true );
  			if( arrayLen( stResult.pos ) eq 2 )
  			{
  				// get IE Version
  				sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
  				return ( sBrowserVersion GTE 5.5 );
  			}
  		}
  		// check for Gecko ( >= 20030210+ )
  		else if( find( "gecko", sAgent ) )
  		{
  			// try to extract Gecko version date
  			stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );
  			if( arrayLen( stResult.pos ) eq 2 )
  			{
  				// get Gecko build (i18n date)
  				sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
  				return ( sBrowserVersion GTE 20030210 );
  			}
  		}
  
  		return false;
  	</cfscript>
  </cffunction>
  
  <cffunction
  	name="showTextArea"
  	access="private"
  	output="yes"
  	returnType="void"
  	hint="Create a textarea field for non-compatible browsers."
  >
  
  	<cfscript>
  		var width = this.width;
  		var height = this.height;
  		
  		// append unit "px" for numeric width and/or height values
  		if( isNumeric( width ) )
  			width = width & "px";
  		if( isNumeric( height ) )
  			height = height & "px";
  	</cfscript>
  
  	<cfoutput>
  	<div>
  	<textarea name="#this.instanceName#" rows="4" cols="40" style="WIDTH: #width#; HEIGHT: #height#" wrap="virtual">#HTMLEditFormat(this.value)#</textarea>
  	</div>
  	</cfoutput>
  
  </cffunction>
  
  <cffunction
  	name="showHTMLEditor"
  	access="private"
  	output="yes"
  	returnType="void"
  	hint="Create the html editor instance for compatible browsers."
  >
  	
  	<cfscript>
  		var sConfig = "";
  		var sURL = "";
  		var basePath = this.basePath;
  		
  		// try to fix the basePath, if ending slash is missing
  		if( len( basePath) and right( basePath, 1 ) is not "/" )
  			basePath = basePath & "/";
  
  		// construct the url
  		sURL = basePath & "editor/fckeditor.html?InstanceName=" & this.instanceName;
  
  		// append toolbarset name to the url
  		if( len( this.toolbarSet ) )
  			sURL = sURL & "&Toolbar=" & this.toolbarSet;
  
  		// create configuration string: Key1=Value1&Key2=Value2&... (Key/Value:HTML encoded)
  		for( key in this.config )
  		{
  			if( len( sConfig ) )
  				sConfig = sConfig & '&';
  			sConfig = sConfig & HTMLEditFormat(key) & '=' & HTMLEditFormat(this.config[key]);
  		}
  	</cfscript>
  
  	<cfoutput>
  	<div>
  	<input type="hidden" id="#this.instanceName#" name="#this.instanceName#" value="#HTMLEditFormat(this.value)#" />
  	<input type="hidden" id="#this.instanceName#___Config" value="#sConfig#" />
  	<iframe id="#this.instanceName#___Frame" src="#sURL#" width="#this.width#" height="#this.height#" frameborder="no" scrolling="no"></iframe>
  	</div>
  	</cfoutput>
  
  </cffunction>
  
  </cfcomponent>
  
  
  1.1                  siminweb/util/fckeditor/fckeditor.cfm
  
  Index: fckeditor.cfm
  ===================================================================
  <cfsetting enablecfoutputonly="Yes">
  <!---
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditor.cfm
   * 	ColdFusion integration. 
   * 	Note this module is created for use with Coldfusion 4.52 and above.
   * 	For a cfc version for coldfusion mx check the fckeditor.cfc.
   * 
   * 	Syntax: 
   * 
   * 	<cfmodule name="path/to/cfc/fckeditor" 
   * 		instanceName="myEditor"
   * 		toolbarSet="..."
   * 		width="..."
   * 		height="..:"
   * 		value="..."
   * 		config="..." 
   * 	>
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-27 12:24:11
   * 
   * File Authors:
   * 		Hendrik Kramer (hk@lwd.de)
  --->
  <!--- ::
  	 * 	Attribute validation
  	:: --->
  <cfparam name="attributes.instanceName" type="string">
  <cfparam name="attributes.width" 		type="string" default="100%">
  <cfparam name="attributes.height" 		type="string" default="200">
  <cfparam name="attributes.toolbarSet" 	type="string" default="Default">
  <cfparam name="attributes.value" 		type="string" default="">
  <cfparam name="attributes.basePath" 	type="string" default="/fckeditor/">
  <cfparam name="attributes.checkBrowser" type="boolean" default="true">
  <cfparam name="attributes.config" 		type="struct" default="#structNew()#">
  
  <!--- ::
  	 * check browser compatibility via HTTP_USER_AGENT, if checkBrowser is true
  	:: --->
  <cfif attributes.checkBrowser>
  
  	<cfscript>
  	sAgent = lCase( cgi.HTTP_USER_AGENT );
  	isCompatibleBrowser = false;
  
  	// check for Internet Explorer ( >= 5.5 )
  	if( find( "msie", sAgent ) and not find( "mac", sAgent ) and not find( "opera", sAgent ) )
  	{
  		// try to extract IE version
  		stResult = reFind( "msie ([5-9]\.[0-9])", sAgent, 1, true );
  		if( arrayLen( stResult.pos ) eq 2 )
  		{
  			// get IE Version
  			sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
  			if( sBrowserVersion GTE 5.5 )
  				isCompatibleBrowser = true;
  		}
  	}
  	// check for Gecko ( >= 20030210+ )
  	else if( find( "gecko", sAgent ) )
  	{
  		// try to extract Gecko version date
  		stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );
  		if( arrayLen( stResult.pos ) eq 2 )
  		{
  			// get Gecko build (i18n date)
  			sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] );
  			if( sBrowserVersion GTE 20030210 )
  				isCompatibleBrowser = true;
  		}
  	}
  	</cfscript>
  
  <cfelse>
  	<!--- :: If we should not check browser compatibility, assume true :: --->
  	<cfset isCompatibleBrowser = true>
  </cfif>
  
  
  <cfif isCompatibleBrowser>
  
  	<!--- ::
  		 * show html editor area for compatible browser
  		:: --->
  
  	<cfscript>
  		// try to fix the basePath, if ending slash is missing
  		if( len( attributes.basePath) and right( attributes.basePath, 1 ) is not "/" )
  			attributes.basePath = attributes.basePath & "/";
  
  		// construct the url
  		sURL = attributes.basePath & "editor/fckeditor.html?InstanceName=" & attributes.instanceName;
  
  		// append toolbarset name to the url
  		if( len( attributes.toolbarSet ) )
  			sURL = sURL & "&Toolbar=" & attributes.toolbarSet;
  
  		// create configuration string: Key1=Value1&Key2=Value2&... (Key/Value:HTML encoded)
  		sConfig = "";
  
  		for( key in attributes.config )
  		{
  			if( len( sConfig ) )
  				sConfig = sConfig & '&';
  			sConfig = sConfig & HTMLEditFormat( key ) & '=' & HTMLEditFormat( attributes.config[key] );
  		}
  	</cfscript>
  
  	<cfoutput>
  	<div>
  	<input type="hidden" id="#attributes.instanceName#" name="#attributes.instanceName#" value="#HTMLEditFormat(attributes.value)#" />
  	<input type="hidden" id="#attributes.instanceName#___Config" value="#sConfig#" />
  	<iframe id="#attributes.instanceName#___Frame" src="#sURL#" width="#attributes.width#" height="#attributes.height#" frameborder="no" scrolling="no"></iframe>
  	</div>
  	</cfoutput>
  
  <cfelse>
  
  	<!--- ::
  		 * show	plain textarea for non compatible browser
  		:: --->
  
  	<cfscript>
  		// append unit "px" for numeric width and/or height values
  		if( isNumeric( attributes.width ) )
  			attributes.width = attributes.width & "px";
  		if( isNumeric( attributes.height ) )
  			attributes.height = attributes.height & "px";
  	</cfscript>
  
  	<cfoutput>
  	<div>
  	<textarea name="#attributes.instanceName#" rows="4" cols="40" style="WIDTH: #width#; HEIGHT: #height#" wrap="virtual">#HTMLEditFormat(attributes.value)#</textarea>
  	</div>
  	</cfoutput>	
  
  </cfif>
  
  <cfsetting enablecfoutputonly="No">
  
  
  
  1.1                  siminweb/util/fckeditor/fckeditor.js
  
  Index: fckeditor.js
  ===================================================================
  /*
   * FCKeditor - The text editor for internet
   * Copyright (C) 2003-2004 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/
   * 
   * File Name: fckeditor.js
   * 	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.
   * 
   * Version:  2.0 Beta 2
   * Modified: 2004-05-31 23:07:55
   * 
   * File Authors:
   * 		Frederico Caldeira Knabben (fredck@fckeditor.net)
   */
  
  // 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		= '/util/fckeditor/' ;
  	this.CheckBrowser	= true ;
  	this.DisplayErrors	= true ;
  
  	this.Config			= new Object() ;
  
  	// Events
  	this.OnError		= null ;	// function( source, errorNumber, errorDescription )
  }
  
  FCKeditor.prototype.Create = function()
  {
  	// Check for errors
  	if ( !this.InstanceName || this.InstanceName.length == 0 )
  	{
  		this._ThrowError( 701, 'You must specify a instance name.' ) ;
  		return ;
  	}
  
  	document.write( '<div>' ) ;
  	
  	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
  	{
  		document.write( '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '">' ) ;
  		document.write( this._GetConfigHtml() ) ;
  		document.write( 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' ;
  		document.write('<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" wrap="virtual">' + this._HTMLEncode( this.Value ) + '<\/textarea>') ;
  	}
  
  	document.write( '</div>' ) ;
  }
  
  FCKeditor.prototype.ReplaceTextarea = function()
  {
  	if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
  	{
  		var oTextarea = document.getElementsByName( this.InstanceName )[0] ;
  		oTextarea.style.display = 'none' ;
  		this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
  		this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
  	}
  }
  
  FCKeditor.prototype._InsertHtmlBefore = function( html, element )
  {
  	if ( element.insertAdjacentHTML )	// IE
  		element.insertAdjacentHTML( 'beforeBegin', html ) ;
  	else								// Gecko
  	{
  		var oRange = document.createRange() ;
  		oRange.setStartBefore( element ) ;
  		var oFragment = oRange.createContextualFragment( html );
  		element.parentNode.insertBefore( oFragment, element ) ;
  	}
  }
  
  FCKeditor.prototype._GetConfigHtml = function()
  {
  	var sConfig = '' ;
  	for ( var o in this.Config )
  	{
  		if ( sConfig.length > 0 ) sConfig += '&' ;
  		sConfig += this._HTMLEncode(o) + '=' + this._HTMLEncode( this.Config[o] ) ;
  	}
  
  	return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '">' ;
  }
  
  FCKeditor.prototype._GetIFrameHtml = function()
  {
  	var sLink = this.BasePath + 'editor/fckeditor.html?InstanceName=' + this.InstanceName ;
  	if (this.ToolbarSet) sLink += '&Toolbar=' + this.ToolbarSet ;
  
  	return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="no" scrolling="no"></iframe>' ;
  }
  
  FCKeditor.prototype._IsCompatibleBrowser = function()
  {
  	var sAgent = navigator.userAgent.toLowerCase() ;
  
  	// Internet Explorer
  	if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 )
  	{
  		var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
  		return ( sBrowserVersion >= 5.5 ) ;
  	}
  	// Gecko
  	else if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 )
  		return true ;
  	else
  		return false ;
  }
  
  FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
  {
  	this.ErrorNumber		= errorNumber ;
  	this.ErrorDescription	= errorDescription ;
  
  	if ( this.DisplayErrors )
  	{
  		document.write( '<div style="COLOR: #ff0000">' ) ;
  		document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
  		document.write( '</div>' ) ;
  	}
  
  	if ( typeof( this.OnError ) == 'function' )
  		this.OnError( this, errorNumber, errorDescription ) ;
  }
  
  FCKeditor.prototype._HTMLEncode = function( text )
  {
  	if ( typeof( text ) != "string" )
  		text = text.toString() ;
  	
  	text = text.replace(/&/g, "&amp;") ;
  	text = text.replace(/"/g, "&quot;") ;
  	text = text.replace(/</g, "&lt;") ;
  	text = text.replace(/>/g, "&gt;") ;
  	text = text.replace(/'/g, "&#146;") ;
  
  	return text ;
  }
  
  
  1.1                  siminweb/util/fckeditor/license.txt
  
  Index: license.txt
  ===================================================================
  		  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
  
  
  


comfuture    04/11/24 21:25:32

  Added:       var      scheme.sql
  Log:
  ù Ʈ
  
  Revision  Changes    Path
  1.1                  siminweb/var/scheme.sql
  
  Index: scheme.sql
  ===================================================================
  ## db scheme
  ## created by maroo
  
  DROP TABLE IF EXISTS simin_user;
  CREATE TABLE simin_user (
  	uid INT NOT NULL PRIMARY KEY auto_increment,
  	user VARCHAR(20) NOT NULL,
  	pass VARCHAR(60) NOT NULL,
  	name VARCHAR(50) NOT NULL DEFAULT '',
  	email VARCHAR(62) NOT NULL DEFAULT '',
  	activate TINYINT NOT NULL DEFAULT 0,
  	reg_date DATETIME NOT NULL DEFAULT '2004-10-20',
  
  	UNIQUE idx_user (user),
  	KEY key_activate (activate),
  	KEY key_reg_date (reg_date)
  );
  
  DROP TABLE IF EXISTS simin_money;
  CREATE TABLE simin_money (
  	idx INT NOT NULL PRIMARY KEY auto_increment,
  	uid INT NOT NULL,
  	money INT NOT NULL DEFAULT 500000,
  
  	UNIQUE idx_uid (uid)
  );
  
  DROP TABLE IF EXISTS simin_rank;
  CREATE TABLE simin_rank (
  	idx INT NOT NULL PRIMARY KEY auto_increment,
  	user VARCHAR(20) NOT NULL,
  	name VARCHAR(50) NOT NULL,
  	rank INT NOT NULL,
  
  	UNIQUE idx_user (user),
  	KEY key_rank (rank)
  );
  
  DROP TABLE IF EXISTS simin_log;
  CREATE TABLE simin_log (
  	idx INT NOT NULL PRIMARY KEY auto_increment,
  	user VARCHAR(20) NOT NULL,
  	event VARCHAR(255),
  	status CHAR(10),
  	price INT,
  	reg_date DATETIME,
  
  	INDEX idx_user (user,reg_date)
  );
  
  DROP TABLE IF EXISTS simin_news;
  CREATE TABLE simin_news (
  	idx INT NOT NULL PRIMARY KEY auto_increment,
  	subject VARCHAR(100) NOT NULL DEFAULT '',			# news, notice, etc...
  	title VARCHAR(255) NOT NULL DEFAULT '',
  	content TEXT,
  	name VARCHAR(20) NOT NULL DEFAULT '',
  	user VARCHAR(20) NOT NULL DEFAULT '',
  	reg_date DATETIME
  );
  
  DROP TABLE IF EXISTS simin_gameroom;
  CREATE TABLE simin_gameroom (
  	idx INT NOT NULL PRIMARY KEY,
  	title VARCHAR(100) NOT NULL DEFAULT '',
  ) type=heap;
  
  DROP TABLE IF EXISTS simin_gameroom_member;
  CREATE TABLE simin_gameroom_member (
  	idx INT NOT NULL PRIMARY KEY,
  	room_no INT NOT NULL,								# simin_gameroom.idx
  	user VARCHAR(20) NOT NULL,
  ) type=heap;
  
  


comfuture    04/12/05 12:17:52

  Modified:    .        NEWS RPC
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +8 -3      siminweb/NEWS
  
  Index: NEWS
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/NEWS,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NEWS	24 Nov 2004 12:25:15 -0000	1.1
  +++ NEWS	5 Dec 2004 03:17:52 -0000	1.2
  @@ -33,6 +33,7 @@
   function news_summery($params) {
   	require_once "lib/class.DB.php";
   	$DB = DB::Connection(getConnectionString());
  +	$DB->config['fetch_mode'] = MYSQL_ASSOC;
   
   	$data = $DB->sqlFetchAll("
   		SELECT
  @@ -63,9 +64,13 @@
   //==-- callbacks --==//
   function cb_format_news(&$arr) {
   	$arr['url'] = 'http://simin.h-9.net/?act=news.read&id='.$arr['idx'];
  -	$arr['content'] = preg_replace('/\s+/',' ',strip_tags($arr['content']));
  -//	$arr['content'] = mb_substr($arr['content'],0,10);
  -	unset($arr['0'],$arr['1'],$arr['2'],$arr['3'],$arr['idx']);	// cleanup junk keys..
  +	$arr['content'] = preg_replace(
  +		array('/\s+/',chr(0xa0)),
  +		array(' ',''),
  +		strip_tags($arr['content'])
  +	);
  +	unset($arr['idx']);	// cleanup junk keys..
   }
  +
   // }}}
   ?>
  
  
  
  1.2       +189 -127  siminweb/RPC
  
  Index: RPC
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/RPC,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RPC	24 Nov 2004 12:25:15 -0000	1.1
  +++ RPC	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,135 +1,205 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: RPC/index.php
  -* 작성일: 2004-10-25
  -* 작성자: 거친마루
  -* 설  명: XML_RPC 서버 
  -*****************************************************************
  -* 
  -*/
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: RPC/index.php
  +* 작성일: 2004-10-25
  +* 작성자: 거친마루
  +* 설  명: XML_RPC 서버 
  +*****************************************************************
  +* 
  +*/
  +
  +require_once "XML/RPC/Server.php";
  +header('Content-type: text/xml');
  +
  +$SERVER = new XML_RPC_Server(
  +	array(
  +		'hello' => array('function'=>'hello'),
  +		'test.hello' => array('function'=>'hello'),
  +		'server.list' => array('function'=>'server_list'),
  +		'news.summery' => array('function' => 'news_summery'),
  +		'auth.login' => array('function' => 'auth_login'),
  +		'user.info' => array('function' => 'user_info')
  +	),
  +	true
  +);
  +
  +// {{{ Methods
  +
  +function hello($params) {
  +	$p = $params->getParam(0);
  +	$name = $p->scalarval();
  +	return new XML_RPC_Response(new XML_RPC_Value('Hello, '.$name,'string'));
  +}
  +
  +function server_list($params) {
  +	return new XML_RPC_Response(
  +		new XML_RPC_Value(array(
  +			new XML_RPC_Value('server1.simin.h-9.net'),
  +			new XML_RPC_Value('server2.simin.h-9.net'),
  +			new XML_RPC_Value('server3.simin.h-9.net')
  +		),'array')
  +	);
  +}
  +
  +function news_summery($params) {
  +	/*
  +	$arr = array();
  +	for ($i = 3; $i >= 1; $i--) {
  +		$arr[] = array(
  +			'url' => 'http://simin.h-9.net/?act=news.read&id='.$i,
  +			'date' => date("Y-m-d H:i:s"),
  +			'title' => $i.' 번째 테스트 뉴스입니다',
  +			'content' => "조만장자 마이더스, 시민쾌걸Online에 기부금 100억 투척!!!\r\n세상에 이럴수가... 명색이 시민쾌걸을 빛내는 게임인데, 펭돌이 용돈보다도 적은 액수를 내놓다니...\r\n게임 제작에 참여한 사람들은 끝내 오열을 참지 못하며 분개했다..."
  +		);
  +	}
  +	*/
  +
  +	require_once "lib/class.DB.php";
  +	$DB = DB::Connection(getConnectionString());
  +
  +	$data = $DB->sqlFetchAll("
  +		SELECT
  +			idx, reg_date date, title, content
  +		FROM
  +			simin_news
  +		ORDER BY
  +			reg_date DESC
  +		LIMIT 3
  +	",MYSQL_ASSOC);
  +	@array_walk($data,'cb_format_news');
  +	$response = new XML_RPC_Response(XML_RPC_encode($data));
  +	return $response;
  +}
  +
  +function auth_login($params) {
  +	$p1 = $params->getParam(0);
  +	$p2 = $params->getParam(1);
  +	if ($p1) $user = $p1->scalarval();
  +	if ($p2) $pass = $p2->scalarval();
  +
  +	if (!$user || !$pass) {
  +		$msg = array(
  +			'code' => '01',
  +			'message' => 'Error! some parameter is not valid'
  +		);
  +		return new XML_RPC_Response(XML_RPC_encode($msg));
  +	} else {
  +		require_once "lib/class.DB.php";
  +		$DB = DB::Connection(getConnectionString());
  +		$cnt = $DB->sqlFetchOne("
  +			SELECT
  +				COUNT(*)
  +			FROM
  +				simin_user
  +			WHERE
  +				user='$user' AND pass='$pass'
  +		");
  +		if ($cnt > 0) {
  +			$msg = array(
  +				'code' => '00',
  +				'message' => 'Success'
  +			);
  +		} else {
  +			$msg = array(
  +				'code' => '02',
  +				'message' => 'No such user'
  +			);
  +		}
  +		return new XML_RPC_Response(XML_RPC_encode($msg));
  +	}
  +}
  +
  +function user_info($params) {
  +	$p1 = $params->getParam(0);
  +	if ($p1) $user = $p1->scalarval();
  +
  +	require_once "lib/class.DB.php";
  +	$DB = DB::Connection(getConnectionString());
  +	$DB->config['fetch_mode'] = MYSQL_ASSOC;
  +
  +	$info = $DB->sqlFetch("
  +		SELECT
  +			*
  +		FROM
  +			simin_user
  +		WHERE
  +			simin_user.user = '$user'
  +	");
  +
  +	return new XML_RPC_Response(XML_RPC_encode($info));
  +}
  +
  +
  +/**
  +* string getConnectionString(void)
  +* 
  +* 설정파일에서 db connection을 만들어 리턴합니다.
  +* 
  +*/
  +function getConnectionString($dsn='default') {
  +	$conf = @parse_ini_file('conf/database.conf.php',true);
  +	$str = $conf[$dsn]['dbms'].'://'.$conf[$dsn]['user'].':'.$conf[$dsn]['pass'].'@'.$conf[$dsn]['host'].'/'.$conf[$dsn]['db'];
  +	return $str;
  +}
  +
  +//==-- callbacks --==//
  +function cb_format_news(&$arr) {
  +	$arr['url'] = 'http://simin.h-9.net/?act=news.read&id='.$arr['idx'];
  +	$arr['content'] = preg_replace('/\s+/',' ',strip_tags($arr['content']));
  +//	$arr['content'] = mb_substr($arr['content'],0,10);
  +	unset($arr['idx']);	// cleanup junk keys..
  +}
  +// }}}
  +?>
  +두의 결과를 한번에 기록할것인가
  +function game_putscore($params) {
  +	$p0 = $params->getParam(0);
  +	$p1 = $params->getParam(1);
  +
  +	$user = $p0->scalarval();
  +	$userid = $p1->scalarval();
  +	
  +	// TODO: 게임 결과 기록 (게임머니, 이벤트로그 업데이트, 랭킹 (가끔) 업데이트)
  +}
  +
  +// 게임 랭킹 얻어오기
  +function game_getrank($params) {
  +	$p0 = $params->getParam(0);
  +	$p1 = $params->getParam(1);
   
  -require_once "XML/RPC/Server.php";
  -header('Content-type: text/xml');
  +	$offset = $p0->scalarval();
  +	$num = $p1->scalarval();
   
  -$SERVER = new XML_RPC_Server(
  -	array(
  -		'hello' => array('function'=>'hello'),
  -		'test.hello' => array('function'=>'hello'),
  -		'server.list' => array('function'=>'server_list'),
  -		'news.summery' => array('function' => 'news_summery'),
  -		'auth.login' => array('function' => 'auth_login'),
  -		'user.info' => array('function' => 'user_info')
  -	),
  -	true
  -);
  -
  -// {{{ Methods
  -
  -function hello($params) {
  -	$p = $params->getParam(0);
  -	$name = $p->scalarval();
  -	return new XML_RPC_Response(new XML_RPC_Value('Hello, '.$name,'string'));
  -}
  -
  -function server_list($params) {
  -	return new XML_RPC_Response(
  -		new XML_RPC_Value(array(
  -			new XML_RPC_Value('server1.simin.h-9.net'),
  -			new XML_RPC_Value('server2.simin.h-9.net'),
  -			new XML_RPC_Value('server3.simin.h-9.net')
  -		),'array')
  -	);
  -}
  -
  -function news_summery($params) {
  -	/*
  -	$arr = array();
  -	for ($i = 3; $i >= 1; $i--) {
  -		$arr[] = array(
  -			'url' => 'http://simin.h-9.net/?act=news.read&id='.$i,
  -			'date' => date("Y-m-d H:i:s"),
  -			'title' => $i.' 번째 테스트 뉴스입니다',
  -			'content' => "조만장자 마이더스, 시민쾌걸Online에 기부금 100억 투척!!!\r\n세상에 이럴수가... 명색이 시민쾌걸을 빛내는 게임인데, 펭돌이 용돈보다도 적은 액수를 내놓다니...\r\n게임 제작에 참여한 사람들은 끝내 오열을 참지 못하며 분개했다..."
  -		);
  -	}
  -	*/
  -
  -	require_once "lib/class.DB.php";
   	$DB = DB::Connection(getConnectionString());
  -
  -	$data = $DB->sqlFetchAll("
  +	
  +	$sql = "
   		SELECT
  -			idx, reg_date date, title, content
  +			*
   		FROM
  -			simin_news
  +			simin_rank
   		ORDER BY
  -			reg_date DESC
  -		LIMIT 3
  -	",MYSQL_ASSOC);
  -	@array_walk($data,'cb_format_news');
  -	$response = new XML_RPC_Response(XML_RPC_encode($data));
  -	return $response;
  -}
  +			rank
  +		LIMIT $offset, $num
  +	";
   
  -function auth_login($params) {
  -	$p1 = $params->getParam(0);
  -	$p2 = $params->getParam(1);
  -	if ($p1) $user = $p1->scalarval();
  -	if ($p2) $pass = $p2->scalarval();
  -
  -	if (!$user || !$pass) {
  -		$msg = array(
  -			'code' => '01',
  -			'message' => 'Error! some parameter is not valid'
  -		);
  -		return new XML_RPC_Response(XML_RPC_encode($msg));
  +	if ($list = $DB->sqlFetchAll($sql)) {
  +		return new XML_RPC_Response(XML_RPC_encode($list));
   	} else {
  -		require_once "lib/class.DB.php";
  -		$DB = DB::Connection(getConnectionString());
  -		$cnt = $DB->sqlFetchOne("
  -			SELECT
  -				COUNT(*)
  -			FROM
  -				simin_user
  -			WHERE
  -				user='$user' AND pass='$pass'
  -		");
  -		if ($cnt > 0) {
  -			$msg = array(
  -				'code' => '00',
  -				'message' => 'Success'
  -			);
  -		} else {
  -			$msg = array(
  -				'code' => '02',
  -				'message' => 'No such user'
  -			);
  -		}
  -		return new XML_RPC_Response(XML_RPC_encode($msg));
  +		return new XML_RPC_Response(XML_RPC_encode(array(
  +				'code' => '05',
  +				'message' => 'Rank is Empty'
  +		)));
   	}
   }
   
  -function user_info($params) {
  -	$p1 = $params->getParam(0);
  -	if ($p1) $user = $p1->scalarval();
  -
  -	require_once "lib/class.DB.php";
  -	$DB = DB::Connection(getConnectionString());
  -	$DB->config['fetch_mode'] = MYSQL_ASSOC;
  -
  -	$info = $DB->sqlFetch("
  -		SELECT
  -			*
  -		FROM
  -			simin_user
  -		WHERE
  -			simin_user.user = '$user'
  -	");
  -
  -	return new XML_RPC_Response(XML_RPC_encode($info));
  +// gc
  +function game_cleanup($params) {
  +	// 룸 정보 클린업
  +	return new XML_RPC_Response(XML_RPC_encode(true));
   }
   
  +// }}}
   
   /**
   * string getConnectionString(void)
  @@ -142,13 +212,5 @@
   	$str = $conf[$dsn]['dbms'].'://'.$conf[$dsn]['user'].':'.$conf[$dsn]['pass'].'@'.$conf[$dsn]['host'].'/'.$conf[$dsn]['db'];
   	return $str;
   }
  -
  -//==-- callbacks --==//
  -function cb_format_news(&$arr) {
  -	$arr['url'] = 'http://simin.h-9.net/?act=news.read&id='.$arr['idx'];
  -	$arr['content'] = preg_replace('/\s+/',' ',strip_tags($arr['content']));
  -//	$arr['content'] = mb_substr($arr['content'],0,10);
  -	unset($arr['idx']);	// cleanup junk keys..
  -}
   // }}}
   ?>
  
  
  


comfuture    04/12/05 12:17:52

  Modified:    conf     board.conf.php layout.conf.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +26 -26    siminweb/conf/board.conf.php
  
  Index: board.conf.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/conf/board.conf.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- board.conf.php	24 Nov 2004 12:25:16 -0000	1.1
  +++ board.conf.php	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,27 +1,27 @@
  -;<?/*
  -ccode = 1010
  -listnum = 10
  -navnum = 10
  -gid = 0,1,2
  -uid = 1,2,3
  -table = wa_board
  -skin = default
  -layout = sub
  -orderby = thread
  -listfields = subject,title,writer,reg_date,read_count,picture
  -
  -[option]
  -search = Yes
  -reply = Yes
  -comment = Yes
  -reply_mail = No
  -allow_private = Yes
  -show_ip = 1
  -
  -[access]
  -write = 1
  -modify = 1
  -delete = 1
  -list = 0
  -
  +;<?/*
  +ccode = 1010
  +listnum = 10
  +navnum = 10
  +gid = 0,1,2
  +uid = 1,2,3
  +table = wa_board
  +skin = default
  +layout = sub
  +orderby = thread
  +listfields = subject,title,writer,reg_date,read_count,picture
  +
  +[option]
  +search = Yes
  +reply = Yes
  +comment = Yes
  +reply_mail = No
  +allow_private = Yes
  +show_ip = 1
  +
  +[access]
  +write = 1
  +modify = 1
  +delete = 1
  +list = 0
  +
   ;*/?>)
  \ No newline at end of file
  
  
  
  1.2       +8 -8      siminweb/conf/layout.conf.php
  
  Index: layout.conf.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/conf/layout.conf.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- layout.conf.php	24 Nov 2004 12:25:16 -0000	1.1
  +++ layout.conf.php	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,8 +1,8 @@
  -;<?/*
  -
  -[main]
  -LAYOUT = html/layout_main.htm
  -
  -[sub]
  -LAYOUT = html/layout_sub.htm
  -;*/?>)
  +;<?/*
  +
  +[main]
  +LAYOUT = html/layout_main.htm
  +
  +[sub]
  +LAYOUT = html/layout_sub.htm
  +;*/?>)
  
  
  


comfuture    04/12/05 12:17:52

  Modified:    html/admin login.htm main.htm menu.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +12 -12    siminweb/html/admin/login.htm
  
  Index: login.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/admin/login.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- login.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ login.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,13 +1,13 @@
  -<form name="loginform" method="post">
  -<table border="1" align="center">
  -	<tr>
  -		<td>관리자 영역입니다. 패스워드를 입력하세요</td>
  -	</tr>
  -	<tr>
  -		<td><input type="password" size="12" name="admin_pass" /></td>
  -	</tr>
  -	<tr>
  -		<td><input type="submit" value=" 로 그 인 " /></td>
  -	</tr>
  -</table>
  +<form name="loginform" method="post">
  +<table border="1" align="center">
  +	<tr>
  +		<td>관리자 영역입니다. 패스워드를 입력하세요</td>
  +	</tr>
  +	<tr>
  +		<td><input type="password" size="12" name="admin_pass" /></td>
  +	</tr>
  +	<tr>
  +		<td><input type="submit" value=" 로 그 인 " /></td>
  +	</tr>
  +</table>
   </form>
  \ No newline at end of file
  
  
  
  1.2       +3 -3      siminweb/html/admin/main.htm
  
  Index: main.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/admin/main.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- main.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ main.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,4 +1,4 @@
  -<frameset cols="150,*" border="0" frameborder="no">
  -	<frame name="menu" src="?act=admin.menu" />
  -	<frame name="content" src="about:blank" />
  +<frameset cols="150,*" border="0" frameborder="no">
  +	<frame name="menu" src="?act=admin.menu" />
  +	<frame name="content" src="about:blank" />
   </frameset>
  \ No newline at end of file
  
  
  
  1.2       +58 -57    siminweb/html/admin/menu.htm
  
  Index: menu.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/admin/menu.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- menu.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ menu.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,57 +1,58 @@
  -<script>WebApp.Import('lib.accordion.js');</script>
  -<style>
  -body, a, div, font {
  -	font-size:9pt;
  -}
  -
  -body {
  -	overflow: hidden;
  -	margin: 0px;
  -	background-color: #F0F0F0;
  -}
  -
  -a {
  -	text-decoration: none;
  -	color: #454545;
  -}
  -
  -a:hover {
  -	text-decoration: underline;
  -	color: #0000FF;
  -}
  -
  -.menu {
  -	border:1px solid #CCCCCC;
  -	background-color:#DEDEDE;
  -	padding:3px 1px 1px 5px;
  -	width:150px;
  -	cursor: pointer;
  -}
  -.submenu {
  -	width:150px;
  -	padding-left:20px;
  -	display:none;
  -}
  -</style>
  -</head>
  -<body topmargin="0" leftmargin="0">
  -<base target="content" />
  -<br>시민고스톱 관리자메뉴<br><br>
  -<div class="menu" onClick="accordion('sub1');">회원관리</div>
  -<div id="sub1" class="submenu">
  -	<div><a href="?act=member.admin.list">+ 가입회원 목록</a></div>
  -	<div><a href="?act=member.admin.list">+ 인증안된 회원</a></div>
  -	<div>+ 게임머니 관리</div>
  -</div>
  -<div class="menu" onClick="accordion('sub2');">웹페이지관리</div>
  -<div id="sub2" class="submenu">
  -	<div><a href="?act=news.admin.list">+ 뉴스</a></div>
  -</div>
  -<div class="menu" onClick="accordion('sub3');">게임관리</div>
  -<div id="sub3" class="submenu">
  -	<div>+ 게임랭킹</div>
  -	<div>+ 게임방관리</div>
  -	<div>+ 트래픽열람</div>
  -</div>
  -<div class="menu"<a href="?act=admin.logout">관리자 종료</a></div>
  -<div class="menu"><a href="?main" target="_parent">홈으로</a></div>
  +<script>WebApp.Import('lib.accordion.js');</script>
  +<style>
  +body, a, div, font {
  +	font-size:9pt;
  +}
  +
  +body {
  +	overflow: hidden;
  +	margin: 0px;
  +	background-color: #F0F0F0;
  +}
  +
  +a {
  +	text-decoration: none;
  +	color: #454545;
  +}
  +
  +a:hover {
  +	text-decoration: underline;
  +	color: #0000FF;
  +}
  +
  +.menu {
  +	border:1px solid #CCCCCC;
  +	background-color:#DEDEDE;
  +	padding:3px 1px 1px 5px;
  +	width:150px;
  +	cursor: pointer;
  +}
  +.submenu {
  +	width:150px;
  +	padding-left:20px;
  +	display:none;
  +}
  +</style>
  +</head>
  +<body topmargin="0" leftmargin="0">
  +<base target="content" />
  +<br>시민고스톱 관리자메뉴<br><br>
  +<div class="menu" onClick="accordion('sub1');">회원관리</div>
  +<div id="sub1" class="submenu">
  +	<div><a href="?act=member.admin.list">+ 가입회원 목록</a></div>
  +	<div><a href="?act=member.admin.list">+ 인증안된 회원</a></div>
  +	<div>+ 게임머니 관리</div>
  +</div>
  +<div class="menu" onClick="accordion('sub2');">웹페이지관리</div>
  +<div id="sub2" class="submenu">
  +	<div><a href="?act=news.admin.list">+ 뉴스</a></div>
  +</div>
  +<div class="menu" onClick="accordion('sub3');">게임관리</div>
  +<div id="sub3" class="submenu">
  +	<div><a href="?act=game.admin.message">+ 메시지전송</a></div>
  +	<div>+ 게임랭킹</div>
  +	<div>+ 게임방관리</div>
  +	<div>+ 트래픽열람</div>
  +</div>
  +<div class="menu"<a href="?act=admin.logout">관리자 종료</a></div>
  +<div class="menu"><a href="?main" target="_parent">홈으로</a></div>
  
  
  


comfuture    04/12/05 12:17:52

  Modified:    html     layout_default.htm layout_main.htm main.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +15 -15    siminweb/html/layout_default.htm
  
  Index: layout_default.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/layout_default.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- layout_default.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ layout_default.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,15 +1,15 @@
  -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  -<html>
  -<head>
  -<title>시민쾌걸 온라인 고스톱</title>
  -<meta name="Generator" content="EditPlus">
  -<meta name="Author" content="거친마루">
  -<meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  -<meta name="Description" content="시민쾌걸 온라인 고스톱">
  -<meta http-equiv="content-type" content="text/html; charset=UTF-8">
  -</head>
  -
  -<body>
  -	{# CONTENT}
  -</body>
  -</html>
  +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  +<html>
  +<head>
  +<title>시민쾌걸 온라인 고스톱</title>
  +<meta name="Generator" content="EditPlus">
  +<meta name="Author" content="거친마루">
  +<meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  +<meta name="Description" content="시민쾌걸 온라인 고스톱">
  +<meta http-equiv="content-type" content="text/html; charset=UTF-8">
  +</head>
  +
  +<body>
  +	{# CONTENT}
  +</body>
  +</html>
  
  
  
  1.2       +39 -31    siminweb/html/layout_main.htm
  
  Index: layout_main.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/layout_main.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- layout_main.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ layout_main.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,31 +1,39 @@
  -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  -<html>
  -<head>
  -<title>시민쾌걸 온라인 고스톱</title>
  -<meta name="Generator" content="EditPlus">
  -<meta name="Author" content="거친마루">
  -<meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  -<meta name="Description" content="시민쾌걸 온라인 고스톱">
  -<meta http-equiv="content-type" content="text/html; charset=UTF-8">
  -</head>
  -
  -<body>
  -<table width="100%" cellpadding="2" cellspacing="1" bgcolor="#c0c0c0" align="center">
  -	<tr>
  -		<td colspan="2" bgcolor="#FFFFFF">
  -			<img src="http://ggorro.com/ggorro/avatar-zorro-01.gif"> 시민쾌걸 온라인 고스톱
  -		</td>
  -	</tr>
  -	<tr>
  -		<td width="150" bgcolor="#FFFFFF">
  -			<a href="/wiki/wiki.php">위키페이지</a><br />
  -			<a href="?act=member.join">회원가입</a><br />
  -			<a href="?act=admin.main">관리자모드</a>
  -		</td>
  -		<td bgcolor="#FFFFFF">
  -			{# CONTENT}
  -		</td>
  -	</tr>
  -</table>
  -</body>
  -</html>
  +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  +<html>
  +<head>
  +<title>시민쾌걸 온라인 고스톱</title>
  +<meta name="Generator" content="EditPlus">
  +<meta name="Author" content="거친마루">
  +<meta name="Keywords" content="시민쾌걸,고스톱,고도리">
  +<meta name="Description" content="시민쾌걸 온라인 고스톱">
  +<meta http-equiv="content-type" content="text/html; charset=UTF-8">
  +</head>
  +
  +<body>
  +<table width="100%" cellpadding="2" cellspacing="1" bgcolor="#c0c0c0" align="center">
  +	<tr>
  +		<td colspan="2" bgcolor="#FFFFFF">
  +			<a href="/"><img src="http://ggorro.com/ggorro/avatar-zorro-01.gif" border="0" /> 시민쾌걸 온라인 고스톱</a>
  +		</td>
  +	</tr>
  +	<tr>
  +		<td width="150" bgcolor="#FFFFFF">
  +			<a href="/wiki/wiki.php">위키페이지</a><br />
  +
  +			<!--{? _SESSION.user}-->
  +			<a href="?act=member.logout">로그아웃</a>
  +			<!--{:}-->
  +			<a href="?act=member.login">로그인</a>
  +			<!--{/}-->
  +			<br />
  +			<a href="?act=member.join">회원가입</a><br />
  +
  +			<a href="?act=admin.main">관리자모드</a>
  +		</td>
  +		<td bgcolor="#FFFFFF">
  +			{# CONTENT}
  +		</td>
  +	</tr>
  +</table>
  +</body>
  +</html>
  
  
  
  1.2       +1 -1      siminweb/html/main.htm
  
  Index: main.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/main.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- main.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ main.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1 +1 @@
  -이곳은 메인 페이지입니다
  +이곳은 메인 페이지입니다
  
  
  


comfuture    04/12/05 12:17:52

  Modified:    html/member/admin list.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +79 -79    siminweb/html/member/admin/list.htm
  
  Index: list.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/member/admin/list.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- list.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ list.htm	5 Dec 2004 03:17:52 -0000	1.2
  @@ -1,80 +1,80 @@
  -<script type="text/javascript">
  -WebApp.Import('sortabletable.js');
  -WebApp.Import('selectableelements.js');
  -WebApp.Import('selectabletablerows.js');
  -WebApp.ImportCSS('sortabletable.css');
  -</script>
  -<style>
  -	body, a, div, font {
  -		font-size:9pt;
  -	}
  -
  -	a {
  -		text-decoration: none;
  -		color: #454545;
  -	}
  -
  -	a:hover {
  -		text-decoration: underline;
  -		color: #0000FF;
  -	}
  -
  -	.selected {
  -		background:	Highlight;
  -		color:		HighlightText;
  -	}
  -</style>
  -<table border="0" cellpadding="0" cellspacing="0">
  -	<tr>
  -		<td>
  -			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  -				<thead>
  -					<tr>
  -						<td width="80">아이디</td>
  -						<td width="100">이름</td>
  -						<td>이메일</td>
  -						<td width="100">가입일자</td>
  -					</tr>
  -				</thead>
  -				<tbody>
  -				<!--{@ list}-->
  -					<tr>
  -						<td>{.user}</td>
  -						<td>{.name}</td>
  -						<td>{.email}</td>
  -						<td>{=date('Y-m-d',.int_date)}</td>
  -					</tr>
  -				<!--{:}
  -					<tr>
  -						<td colspan="3">가입한 회원이 없습니다</td>
  -					</tr>
  -				{/}-->
  -				</tbody>
  -			</table>
  -		</td>
  -	</tr>
  -	<tr>
  -		<td align="center">
  -			<wa:paging total="{total}" />
  -		</td>
  -	</tr>
  -</table>
  -
  -<script type="text/javascript">
  -var st1 = new SortableTable(
  -	document.getElementById("membertable"),
  -	["CaseInsensitiveString", "String", "String", "Date"]
  -);
  -</script>
  -
  -<script type="text/javascript">
  -var st = new SelectableTableRows(
  -	document.getElementById("membertable"),
  -	true
  -);
  -st.onchange = function () {
  -	var text = st.getSelectedIndexes().toString();
  -	window.status = text;
  -};
  -
  +<script type="text/javascript">
  +WebApp.Import('sortabletable.js');
  +WebApp.Import('selectableelements.js');
  +WebApp.Import('selectabletablerows.js');
  +WebApp.ImportCSS('sortabletable.css');
  +</script>
  +<style>
  +	body, a, div, font {
  +		font-size:9pt;
  +	}
  +
  +	a {
  +		text-decoration: none;
  +		color: #454545;
  +	}
  +
  +	a:hover {
  +		text-decoration: underline;
  +		color: #0000FF;
  +	}
  +
  +	.selected {
  +		background:	Highlight;
  +		color:		HighlightText;
  +	}
  +</style>
  +<table border="0" cellpadding="0" cellspacing="0">
  +	<tr>
  +		<td>
  +			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  +				<thead>
  +					<tr>
  +						<td width="80">아이디</td>
  +						<td width="100">이름</td>
  +						<td>이메일</td>
  +						<td width="100">가입일자</td>
  +					</tr>
  +				</thead>
  +				<tbody>
  +				<!--{@ list}-->
  +					<tr>
  +						<td>{.user}</td>
  +						<td>{.name}</td>
  +						<td>{.email}</td>
  +						<td>{=date('Y-m-d',.int_date)}</td>
  +					</tr>
  +				<!--{:}
  +					<tr>
  +						<td colspan="3">가입한 회원이 없습니다</td>
  +					</tr>
  +				{/}-->
  +				</tbody>
  +			</table>
  +		</td>
  +	</tr>
  +	<tr>
  +		<td align="center">
  +			<wa:paging total="{total}" />
  +		</td>
  +	</tr>
  +</table>
  +
  +<script type="text/javascript">
  +var st1 = new SortableTable(
  +	document.getElementById("membertable"),
  +	["CaseInsensitiveString", "String", "String", "Date"]
  +);
  +</script>
  +
  +<script type="text/javascript">
  +var st = new SelectableTableRows(
  +	document.getElementById("membertable"),
  +	true
  +);
  +st.onchange = function () {
  +	var text = st.getSelectedIndexes().toString();
  +	window.status = text;
  +};
  +
   </script>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    html/member join.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +6 -6      siminweb/html/member/join.htm
  
  Index: join.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/member/join.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- join.htm	24 Nov 2004 12:25:16 -0000	1.1
  +++ join.htm	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,7 +1,7 @@
  -<form name="joinform" method="post">
  -	아이디 <input type="text" name="user" size="12" /><br />
  -	패스워드 <input type="password" name="pass" size="12" /><br />
  -	이름 <input type="text" name="name" /><br />
  -	이메일 <input type="text" name="email" size="50" /><br />
  -	<input type="submit" value="가  입" />
  +<form name="joinform" method="post">
  +	아이디 <input type="text" name="user" size="12" /><br />
  +	패스워드 <input type="password" name="pass" size="12" /><br />
  +	이름 <input type="text" name="name" /><br />
  +	이메일 <input type="text" name="email" size="50" /><br />
  +	<input type="submit" value="가  입" />
   </form>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    html/news/admin list.htm write.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +121 -82   siminweb/html/news/admin/list.htm
  
  Index: list.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/news/admin/list.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- list.htm	24 Nov 2004 12:25:17 -0000	1.1
  +++ list.htm	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,83 +1,122 @@
  -<script type="text/javascript">
  -WebApp.Import('sortabletable.js');
  -WebApp.Import('selectableelements.js');
  -WebApp.Import('selectabletablerows.js');
  -WebApp.ImportCSS('sortabletable.css');
  -</script>
  -<style>
  -	body, td, a, div, font {
  -		font-size:9pt;
  -	}
  -
  -	a {
  -		text-decoration: none;
  -		color: #454545;
  -	}
  -
  -	a:hover {
  -		text-decoration: underline;
  -		color: #0000FF;
  -	}
  -
  -	.selected {
  -		background:	Highlight;
  -		color:		HighlightText;
  -	}
  -</style>
  -<table border="0" cellpadding="0" cellspacing="0">
  -	<tr>
  -		<td>
  -			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  -				<thead>
  -					<tr align="center">
  -						<td width="60">번호</td>
  -						<td>제목</td>
  -						<td width="100">작성일자</td>
  -					</tr>
  -				</thead>
  -				<tbody>
  -				<!--{@ list}-->
  -					<tr>
  -						<td align="center">{.num}</td>
  -						<td>{.title}</td>
  -						<td align="center">{=date('Y-m-d',.int_date)}</td>
  -					</tr>
  -				<!--{:}
  -					<tr align="center">
  -						<td colspan="3">작성된 뉴스가 없습니다</td>
  -					</tr>
  -				{/}-->
  -				</tbody>
  -			</table>
  -		</td>
  -	</tr>
  -	<tr>
  -		<td align="center">
  -			<wa:paging total="{total}" />
  -		</td>
  -	</tr>
  -	<tr>
  -		<td align="right">
  -			<button onclick="location.href = '?act=news.admin.write';">뉴스작성</button>
  -		</td>
  -	</tr>
  -</table>
  -
  -<script type="text/javascript">
  -var st1 = new SortableTable(
  -	document.getElementById("membertable"),
  -	["CaseInsensitiveString", "String", "String", "Date"]
  -);
  -</script>
  -
  -<script type="text/javascript">
  -var st = new SelectableTableRows(
  -	document.getElementById("membertable"),
  -	true
  -);
  -st.onchange = function () {
  -	var text = st.getSelectedIndexes().toString();
  -	window.status = text;
  -};
  -
  +<script type="text/javascript">
  +WebApp.Import('sortabletable.js');
  +WebApp.Import('selectableelements.js');
  +WebApp.Import('selectabletablerows.js');
  +WebApp.ImportCSS('sortabletable.css');
  +</script>
  +
  +<script>
  +	function pack(s) {
  +		// process button disabled
  +		document.getElementById('btnEdit').disabled = (s.length != 1);
  +		document.getElementById('btnDelete').disabled = (s.length <= 0);
  +
  +		// pack selected idx
  +		var idx = new Array();
  +		for (var i in s) {
  +			var el = document.getElementById('i'+(s[i]-1));
  +			idx[idx.length] = el.value;
  +		}
  +		var form = document.forms['actionform'];
  +		form.elements['idx'].value = idx.join(';');
  +	}
  +
  +	function del() {
  +		var form = document.forms['actionform'];
  +		form.elements['act'].value = 'news.admin.delete';
  +		form.submit();
  +
  +	}
  +
  +	function edit() {
  +		var form = document.forms['actionform'];
  +		form.elements['act'].value = 'news.admin.modify';
  +		form.submit();
  +	}
  +</script>
  +<style>
  +	body, td, a, div, font {
  +		font-size:9pt;
  +	}
  +
  +	a {
  +		text-decoration: none;
  +		color: #454545;
  +	}
  +
  +	a:hover {
  +		text-decoration: underline;
  +		color: #0000FF;
  +	}
  +
  +	.selected {
  +		background:	Highlight;
  +		color:		HighlightText;
  +	}
  +</style>
  +<table border="0" cellpadding="0" cellspacing="0">
  +	<tr>
  +		<td>
  +			<table id="membertable" class="sort-table" style="table-layout: fixed;" cellspacing="1" width="600">
  +				<thead>
  +					<tr align="center">
  +						<td width="60">번호</td>
  +						<td>제목</td>
  +						<td width="100">작성일자</td>
  +					</tr>
  +				</thead>
  +				<tbody>
  +				<!--{@ list}-->
  +					<tr>
  +						<td align="center">{.num}<input type="hidden" name="i{.index_}" id="i{.index_}" value="{.idx}" /></td>
  +						<td>{.title}</td>
  +						<td align="center">{=date('Y-m-d',.int_date)}</td>
  +					</tr>
  +				<!--{:}
  +					<tr align="center">
  +						<td colspan="3">작성된 뉴스가 없습니다</td>
  +					</tr>
  +				{/}-->
  +				</tbody>
  +			</table>
  +		</td>
  +	</tr>
  +	<tr>
  +		<td align="center">
  +			<wa:paging total="{total}" />
  +		</td>
  +	</tr>
  +	<tr>
  +		<td align="right">
  +			<button onclick="del()" id="btnDelete" disabled>삭제</button>
  +			<button onclick="edit()" id="btnEdit" disabled>수정</button>
  +			<button onclick="location.href = '?act=news.admin.write';">뉴스작성</button>
  +
  +			<form name="actionform" method="get">
  +				<input type="hidden" name="act" value="">
  +				<input type="hidden" name="page" value="{_page}">
  +				<input type="hidden" name="idx" value="">
  +			</form>
  +		</td>
  +	</tr>
  +</table>
  +
  +<script type="text/javascript">
  +var st1 = new SortableTable(
  +	document.getElementById("membertable"),
  +	["CaseInsensitiveString", "String", "String", "Date"]
  +);
  +</script>
  +
  +<script type="text/javascript">
  +var st = new SelectableTableRows(
  +	document.getElementById("membertable"),
  +	true
  +);
  +
  +st.onchange = function () {
  +	var text = st.getSelectedIndexes().toString();
  +	pack(st.getSelectedIndexes());
  +	window.status = text;
  +}
   </script>
  \ No newline at end of file
  
  
  
  1.2       +38 -38    siminweb/html/news/admin/write.htm
  
  Index: write.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/news/admin/write.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- write.htm	24 Nov 2004 12:25:17 -0000	1.1
  +++ write.htm	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,38 +1,38 @@
  -<script src="/util/fckeditor/fckeditor.js"></script>
  -<style>
  -	body, td, a, div, font {
  -		font-size:9pt;
  -	}
  -
  -	a {
  -		text-decoration: none;
  -		color: #454545;
  -	}
  -
  -	a:hover {
  -		text-decoration: underline;
  -		color: #0000FF;
  -	}
  -</style>
  -<form name="newsform" method="post">
  -	<table width="600" cellpadding="0" cellspacing="1">
  -		<tr>
  -			<td>제목</td>
  -			<td><input type="text" size="90" name="title" /></td>
  -		</tr>
  -		<tr>
  -			<td colspan="2">
  -			<script>
  -				oFCKeditor = new FCKeditor('content','600px','400px');
  -				oFCKeditor.Create();
  -			</script>
  -			</td>
  -		</tr>
  -		<tr>
  -			<td colspan="2">
  -				<input type="submit" value="작성완료" />
  -			</td>
  -		</tr>
  -	</table>
  -</form>
  -</form>
  +<script src="/util/fckeditor/fckeditor.js"></script>
  +<style>
  +	body, td, a, div, font {
  +		font-size:9pt;
  +	}
  +
  +	a {
  +		text-decoration: none;
  +		color: #454545;
  +	}
  +
  +	a:hover {
  +		text-decoration: underline;
  +		color: #0000FF;
  +	}
  +</style>
  +<form name="newsform" method="post">
  +	<table width="600" cellpadding="0" cellspacing="1">
  +		<tr>
  +			<td>제목</td>
  +			<td><input type="text" size="90" name="title" value="{title}" /></td>
  +		</tr>
  +		<tr>
  +			<td colspan="2">
  +			<script>
  +				oFCKeditor = new FCKeditor('content','600px','400px');
  +				oFCKeditor.Create();
  +			</script>
  +			</td>
  +		</tr>
  +		<tr>
  +			<td colspan="2">
  +				<input type="submit" value="작성완료" />
  +			</td>
  +		</tr>
  +	</table>
  +</form>
  +</form>
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    html/news read.htm
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +1 -1      siminweb/html/news/read.htm
  
  Index: read.htm
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/html/news/read.htm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- read.htm	24 Nov 2004 12:25:17 -0000	1.1
  +++ read.htm	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,2 +1,2 @@
  -제목: {title} <br />
  +제목: {title} <br />
   내용: <br/> {content}
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    module/admin __init__.php login.php logout.php main.php
                        menu.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +17 -17    siminweb/module/admin/__init__.php
  
  Index: __init__.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/admin/__init__.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- __init__.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ __init__.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,18 +1,18 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/admin/__init__.php
  -* 작성일: 2004-10-29
  -* 작성자: 거친마루
  -* 설  명: 관리자 init
  -*****************************************************************
  -* 
  -*/
  -
  -if ($act != 'admin.login' && !$_SESSION['admin']) {
  -	WebApp::redirect($URL->setVar(array(
  -		'redir' => urlencode($QUERY_STRING),
  -		'act' => 'admin.login'
  -	)));
  -}
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/admin/__init__.php
  +* 작성일: 2004-10-29
  +* 작성자: 거친마루
  +* 설  명: 관리자 init
  +*****************************************************************
  +* 
  +*/
  +
  +if ($act != 'admin.login' && !$_SESSION['admin']) {
  +	WebApp::redirect($URL->setVar(array(
  +		'redir' => urlencode($QUERY_STRING),
  +		'act' => 'admin.login'
  +	)));
  +}
   ?>
  \ No newline at end of file
  
  
  
  1.2       +25 -25    siminweb/module/admin/login.php
  
  Index: login.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/admin/login.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- login.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ login.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,26 +1,26 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/admin/login.php
  -* 작성일: 2004-10-29
  -* 작성자: 거친마루
  -* 설  명: 관리자 로그인
  -*****************************************************************
  -* 
  -*/
  -
  -switch (REQUEST_METHOD) {
  -	case 'GET':
  -		$tpl->setLayout('default');
  -		$tpl->define('CONTENT', WebApp::getTemplate('admin/login.htm'));
  -		break;
  -	case 'POST':
  -		if ($_POST['admin_pass'] == WebApp::getConf('admin.pass')) {
  -			$_SESSION['admin'] = true;
  -			WebApp::redirect('?'.urldecode($_GET['redir']));
  -		}  else {
  -			WebApp::moveBack('비밀번호가 올바르지 않습니다');
  -		}
  -		break;
  -}
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/admin/login.php
  +* 작성일: 2004-10-29
  +* 작성자: 거친마루
  +* 설  명: 관리자 로그인
  +*****************************************************************
  +* 
  +*/
  +
  +switch (REQUEST_METHOD) {
  +	case 'GET':
  +		$tpl->setLayout('default');
  +		$tpl->define('CONTENT', WebApp::getTemplate('admin/login.htm'));
  +		break;
  +	case 'POST':
  +		if ($_POST['admin_pass'] == WebApp::getConf('admin.pass')) {
  +			$_SESSION['admin'] = true;
  +			WebApp::redirect('?'.urldecode($_GET['redir']));
  +		}  else {
  +			WebApp::moveBack('비밀번호가 올바르지 않습니다');
  +		}
  +		break;
  +}
   ?>
  \ No newline at end of file
  
  
  
  1.2       +13 -13    siminweb/module/admin/logout.php
  
  Index: logout.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/admin/logout.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- logout.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ logout.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,14 +1,14 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/admin/login.php
  -* 작성일: 2004-10-29
  -* 작성자: 거친마루
  -* 설  명: 관리자 로그인
  -*****************************************************************
  -* 
  -*/
  -
  -$_SESSION['admin'] = false;
  -WebApp::redirect('?main','top');
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/admin/login.php
  +* 작성일: 2004-10-29
  +* 작성자: 거친마루
  +* 설  명: 관리자 로그인
  +*****************************************************************
  +* 
  +*/
  +
  +$_SESSION['admin'] = false;
  +WebApp::redirect('?main','top');
   ?>
  \ No newline at end of file
  
  
  
  1.2       +20 -20    siminweb/module/admin/main.php
  
  Index: main.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/admin/main.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- main.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ main.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,21 +1,21 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/admin/main.php
  -* 작성일: 2004-10-29
  -* 작성자: 거친마루
  -* 설  명: 관리자 페이지 메인
  -*****************************************************************
  -* 
  -*/
  -
  -if (!$_SESSION['admin']) {
  -	WebApp::redirect($URL->setVar(array(
  -		'redir' => urlencode($QUERY_STRING),
  -		'act' => 'admin.login'
  -	)));
  -}
  -
  -$tpl->setLayout('blank');
  -$tpl->define('CONTENT', WebApp::getTemplate('admin/main.htm'));
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/admin/main.php
  +* 작성일: 2004-10-29
  +* 작성자: 거친마루
  +* 설  명: 관리자 페이지 메인
  +*****************************************************************
  +* 
  +*/
  +
  +if (!$_SESSION['admin']) {
  +	WebApp::redirect($URL->setVar(array(
  +		'redir' => urlencode($QUERY_STRING),
  +		'act' => 'admin.login'
  +	)));
  +}
  +
  +$tpl->setLayout('blank');
  +$tpl->define('CONTENT', WebApp::getTemplate('admin/main.htm'));
   ?>
  \ No newline at end of file
  
  
  
  1.2       +13 -13    siminweb/module/admin/menu.php
  
  Index: menu.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/admin/menu.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- menu.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ menu.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,14 +1,14 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/admin/menu.php
  -* 작성일: 2004-10-31
  -* 작성자: 거친마루
  -* 설  명: 관리자 메뉴
  -*****************************************************************
  -* 
  -*/
  -
  -$tpl->define('CONTENT', WebApp::getTemplate('admin/menu.htm'));
  -
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/admin/menu.php
  +* 작성일: 2004-10-31
  +* 작성자: 거친마루
  +* 설  명: 관리자 메뉴
  +*****************************************************************
  +* 
  +*/
  +
  +$tpl->define('CONTENT', WebApp::getTemplate('admin/menu.htm'));
  +
   ?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    module/game room.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +40 -0     siminweb/module/game/room.php
  
  Index: room.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/game/room.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- room.php	24 Nov 2004 12:25:19 -0000	1.1
  +++ room.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -0,0 +1,40 @@
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/game/room.php
  +* 작성일: 2004-12-05
  +* 작성자: 거친마루
  +* 설  명: 게임룸 목록 출력
  +*****************************************************************
  +* 
  +*/
  +
  +// {{{ Configure
  +$listnum = 10;
  +$navnum = 10;
  +// }}}
  +
  +$page = $_GET['page'];
  +if (!$page) $page = 1;
  +$seek = $listnum * ($page - 1);
  +
  +$DB = &WebApp::singleton('DB');
  +$sql = "
  +	SELECT
  +		*
  +	FROM
  +		simin_room
  +	LIMIT
  +		$seek, $listnum
  +";
  +
  +$data = $DB->sqlFetchAll($sql);
  +
  +$tpl->setLayout('main');
  +$tpl->define('CONTENT', WebApp::getTemplate('game/room.htm'));
  +$tpl->assign('LIST',&$data);
  +
  +
  +// {{{ Function
  +// }}}
  +?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:53

  Modified:    module/member confirm.php join.php login.php logout.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +56 -11    siminweb/module/member/confirm.php
  
  Index: confirm.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/member/confirm.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- confirm.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ confirm.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,12 +1,57 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* ϸ: module/member/confirm.php
  -* ۼ: 2004-10-26
  -* ۼ: ģ
  -*   :  Ȯ ޽
  -*****************************************************************
  -* 
  -*/
  -
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/confirm.php
  +* 작성일: 2004-12-04
  +* 작성자: 거친마루
  +* 설  명: 가입 확인 메시지
  +*****************************************************************
  +* 
  +*/
  +
  +$default_money = WebApp::getConf('simin.default_money');
  +$money_unit = WebApp::getConf('simin.money_unit');
  +
  +$uniqid = $_GET['uniqid'];
  +$filename = "cache/dynamic/activate/".$uniqid;
  +
  +$DB = &WebApp::singleton('DB');
  +
  +if (is_file($filename)) {
  +	$uid = (int)trim(file_get_contents($filename));
  +	$sql = "
  +		INSERT INTO simin_money
  +			(uid, money)
  +		VALUES
  +			($uid, $default_money)
  +	";
  +	if ($DB->query($sql)) {
  +		$info = $DB->sqlFetch("
  +			SELECT
  +				*
  +			FROM
  +				simin_user
  +			WHERE
  +				uid = $uid
  +		");
  +		$tpl->setLayout('main');
  +		$tpl->define('CONTENT', WebApp::getTemplate('member/welcome.htm'));
  +		$tpl->assign($info);
  +		$tpl->assign(array(
  +			'default_money'=>$default_money,
  +			'money_unit'=>$money_unit,
  +		));
  +		@unlink($filename);
  +	} else {
  +		echo $sql;
  +		$tpl->define('CONTENT', WebApp::getTemplate('error.htm'));
  +		$tpl->assign('message','회원가입 확인을 완료할 수 없습니다');
  +		// XXX: 이사람들은 게임머니를 어떻게 주지?
  +	}
  +} else {
  +	$tpl->define('CONTENT', WebApp::getTemplate('error.htm'));
  +	$tpl->assign('message','올바른 인증키가 아닙니다. 회원가입을 완료할 수 없습니다');
  +}
  +
  +// TODO: gc 처리::이메일 확인을 하지 않는 키값 삭제, 해당 아이디 삭제(?)
   ?>
  \ No newline at end of file
  
  
  
  1.2       +86 -47    siminweb/module/member/join.php
  
  Index: join.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/member/join.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- join.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ join.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -1,48 +1,87 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/member/join.php
  -* 작성일: 2004-10-26
  -* 작성자: 거친마루
  -* 설  명: 회원가입
  -*****************************************************************
  -* 
  -*/
  -
  -switch (REQUEST_METHOD) {
  -	case 'GET':
  -		$tpl->setLayout('main');
  -		$tpl->define('CONTENT',WebApp::getTemplate('member/join.htm'));
  -		break;
  -	case 'POST':
  -		$DB = &WebApp::singleton('DB');
  -
  -		$user = $_POST['user'];
  -		$pass = md5($_POST['pass']);
  -		$name = $_POST['name'];
  -		$email = $_POST['email'];
  -		$reg_date = date('Y-m-d H:i:s');
  -
  -		$sql = "
  -			INSERT INTO	simin_user
  -				(user, pass, name, email, reg_date)
  -			VALUES
  -				('$user','$pass','$name','$email','$reg_date')
  -		";
  -
  -		if ($DB->query($sql)) {
  -			//require_once "Mail.php";
  -			// 메일발송
  -
  -			WebApp::redirect($URL->setVar(
  -				array(
  -					'act' => 'member.confirm',
  -					'uniqid' => $uniqid
  -				)
  -			));
  -		} else {
  -			WebApp::moveBack('회원 가입에 실패하였습니다'.$DB->error);
  -		}
  -		break;
  -}
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/join.php
  +* 작성일: 2004-10-26
  +* 작성자: 거친마루
  +* 설  명: 회원가입
  +*****************************************************************
  +* 
  +*/
  +
  +$mail_title = "시민쾌걸 온라인 고스톱에 가입하신것을 환영합니다.";
  +
  +switch (REQUEST_METHOD) {
  +	case 'GET':
  +		$tpl->setLayout('main');
  +		$tpl->define('CONTENT',WebApp::getTemplate('member/join.htm'));
  +		break;
  +	case 'POST':
  +		$DB = &WebApp::singleton('DB');
  +
  +		$user = $_POST['user'];
  +		$pass = md5($_POST['pass']);
  +		$name = $_POST['name'];
  +		$email = $_POST['email'];
  +		$reg_date = date('Y-m-d H:i:s');
  +
  +		$sql = "
  +			INSERT INTO	simin_user
  +				(user, pass, name, email, reg_date)
  +			VALUES
  +				('$user','$pass','$name','$email','$reg_date')
  +		";
  +
  +		if ($DB->query($sql)) {
  +			require_once "Mail.php";
  +			$M = Mail::Factory('smtp');
  +
  +			$headers = array(
  +					'Subject' => encode_2047($mail_title),
  +					'From' => $conf['from'],
  +					'MIME-Version' => '1.0',
  +					'Content-type' => 'text/html; charset=utf-8',
  +					'Content-Transfer-Encoding' => '8bit'
  +			);
  +
  +			$uid = mysql_insert_id();
  +			$activate_key = md5(uniqid(rand(), true).$user.$pass.$name.$reg_date);
  +			$fp = @fopen("cache/dynamic/activate/".$activate_key,'w');
  +			@fwrite($fp, $uid);
  +			@fclose($fp);
  +
  +			$activate_link = "http://".HOST."/?act=member.confirm&uniqid=".$activate_key;
  +
  +			$tpl->define('MAILBODY', WebApp::getTemplate('member/welcome_mail.htm'));
  +			$tpl->assign(array(
  +				'user' => $user,
  +				'name' => $name,
  +				'email' => $email,
  +				'activate_link' => $activate_link
  +			));
  +			$body = $tpl->fetch('MAILBODY');
  +
  +			$M->send($email, $headers, $body);	// 메일전송
  +
  +/*
  +			WebApp::redirect($URL->setVar(
  +				array(
  +					'act' => 'member.confirm',
  +					'uniqid' => $uniqid
  +				)
  +			));
  +*/
  +			$tpl->setLayout('main');
  +			$tpl->define('CONTENT', WebApp::getTemplate('member/confirm_wait.htm'));
  +		} else {
  +			WebApp::moveBack('회원 가입에 실패하였습니다'.$DB->error);
  +		}
  +		break;
  +}
  +
  +// {{{ Functions
  +function encode_2047($subject) {
  +    return '=?utf-8?b?'.base64_encode($subject).'?=';
  +}
  +// }}}
   ?>
  \ No newline at end of file
  
  
  
  1.2       +40 -0     siminweb/module/member/login.php
  
  Index: login.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/member/login.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- login.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ login.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -0,0 +1,40 @@
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/login.php
  +* 작성일: 2004-12-05
  +* 작성자: 거친마루
  +* 설  명: 회원 로그인
  +*****************************************************************
  +* 
  +*/
  +
  +switch (REQUEST_METHOD) {
  +	case 'GET':
  +		$tpl->setLayout('main');
  +		$tpl->define('CONTENT', WebApp::getTemplate('member/login.htm'));
  +		break;
  +	case 'POST':
  +		$user = $_POST['user'];
  +		$pass = $_POST['pass'];
  +		$hashed_pass = md5($pass);
  +
  +		$DB = &WebApp::singleton('DB');
  +		$sql = "
  +			SELECT
  +				*
  +			FROM
  +				simin_user
  +			WHERE
  +				user='$user' AND pass='$hashed_pass'
  +		";
  +		if ($info = $DB->sqlFetch($sql)) {
  +			session_register('user', $user);
  +			session_register('name', $info['name']);
  +			WebApp::redirect('/');	// TODO: 로그인 전 화면으로 돌아가야함
  +		} else {
  +			WebApp::moveBack('아이디 또는 패스워드가 틀립니다');
  +		}
  +		break;
  +}
  +?>
  \ No newline at end of file
  
  
  
  1.2       +14 -0     siminweb/module/member/logout.php
  
  Index: logout.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/member/logout.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- logout.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ logout.php	5 Dec 2004 03:17:53 -0000	1.2
  @@ -0,0 +1,14 @@
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/login.php
  +* 작성일: 2004-12-05
  +* 작성자: 거친마루
  +* 설  명: 회원 로그아웃
  +*****************************************************************
  +* 
  +*/
  +
  +$_SESSION['auth'] = $_SESSION['user'] = $_SESSION['name'] = '';
  +WebApp::redirect('/');
  +?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:54

  Modified:    module/member/admin list.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +50 -50    siminweb/module/member/admin/list.php
  
  Index: list.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/member/admin/list.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- list.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ list.php	5 Dec 2004 03:17:54 -0000	1.2
  @@ -1,51 +1,51 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/member/admin/view.php
  -* 작성일: 2004-10-26
  -* 작성자: 거친마루
  -* 설  명: 회원 목록 보기
  -*****************************************************************
  -* 
  -*/
  -
  -// {{{ Configure
  -$listnum = 10;
  -$navnum = 10;
  -// }}}
  -
  -$page = $_GET['page'];
  -if (!$page) $page = 1;
  -$seek = $listnum * ($page - 1);
  -
  -$DB = &WebApp::singleton('DB');
  -
  -$total = $DB->sqlFetchOne("
  -	SELECT
  -		COUNT(*)
  -	FROM
  -		simin_user
  -");
  -
  -$data = $DB->sqlFetchAll("
  -	SELECT
  -		user, name, email, reg_date
  -	FROM
  -		simin_user
  -	ORDER BY
  -		reg_date DESC
  -	LIMIT
  -		$seek, $listnum
  -");
  -
  -@array_walk($data,'cb_format_list');
  -$tpl->define('CONTENT',WebApp::getTemplate('member/admin/list.htm'));
  -$tpl->assign('total',$total);
  -$tpl->assign('list',$data);
  -
  -// {{{ Functions
  -function cb_format_list(&$arr) {
  -	$arr['int_date'] = strtotime($arr['reg_date']);
  -}
  -// }}}
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/admin/view.php
  +* 작성일: 2004-10-26
  +* 작성자: 거친마루
  +* 설  명: 회원 목록 보기
  +*****************************************************************
  +* 
  +*/
  +
  +// {{{ Configure
  +$listnum = 10;
  +$navnum = 10;
  +// }}}
  +
  +$page = $_GET['page'];
  +if (!$page) $page = 1;
  +$seek = $listnum * ($page - 1);
  +
  +$DB = &WebApp::singleton('DB');
  +
  +$total = $DB->sqlFetchOne("
  +	SELECT
  +		COUNT(*)
  +	FROM
  +		simin_user
  +");
  +
  +$data = $DB->sqlFetchAll("
  +	SELECT
  +		user, name, email, reg_date
  +	FROM
  +		simin_user
  +	ORDER BY
  +		reg_date DESC
  +	LIMIT
  +		$seek, $listnum
  +");
  +
  +@array_walk($data,'cb_format_list');
  +$tpl->define('CONTENT',WebApp::getTemplate('member/admin/list.htm'));
  +$tpl->assign('total',$total);
  +$tpl->assign('list',$data);
  +
  +// {{{ Functions
  +function cb_format_list(&$arr) {
  +	$arr['int_date'] = strtotime($arr['reg_date']);
  +}
  +// }}}
   ?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:54

  Modified:    module/news/admin list.php write.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +53 -53    siminweb/module/news/admin/list.php
  
  Index: list.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/news/admin/list.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- list.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ list.php	5 Dec 2004 03:17:54 -0000	1.2
  @@ -1,54 +1,54 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/member/admin/view.php
  -* 작성일: 2004-10-31
  -* 작성자: 거친마루
  -* 설  명: 뉴스 목록보기
  -*****************************************************************
  -* 
  -*/
  -
  -// {{{ Configure
  -$listnum = 10;
  -$navnum = 10;
  -// }}}
  -
  -$page = $_GET['page'];
  -if (!$page) $page = 1;
  -$seek = $listnum * ($page - 1);
  -
  -$DB = &WebApp::singleton('DB');
  -
  -$total = $DB->sqlFetchOne("
  -	SELECT
  -		COUNT(*)
  -	FROM
  -		simin_news
  -");
  -
  -$data = $DB->sqlFetchAll("
  -	SELECT
  -		idx, title, reg_date
  -	FROM
  -		simin_news
  -	ORDER BY
  -		reg_date DESC
  -	LIMIT
  -		$seek, $listnum
  -");
  -
  -@array_walk($data,'cb_format_list');
  -$tpl->define('CONTENT',WebApp::getTemplate('news/admin/list.htm'));
  -$tpl->assign('total',$total);
  -$tpl->assign('list',$data);
  -
  -// {{{ Functions
  -function cb_format_list(&$arr) {
  -	global $total, $seek;
  -	static $num;
  -	$arr['num'] = $total - $seek - $num++;
  -	$arr['int_date'] = strtotime($arr['reg_date']);
  -}
  -// }}}
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/member/admin/view.php
  +* 작성일: 2004-10-31
  +* 작성자: 거친마루
  +* 설  명: 뉴스 목록보기
  +*****************************************************************
  +* 
  +*/
  +
  +// {{{ Configure
  +$listnum = 10;
  +$navnum = 10;
  +// }}}
  +
  +$page = $_GET['page'];
  +if (!$page) $page = 1;
  +$seek = $listnum * ($page - 1);
  +
  +$DB = &WebApp::singleton('DB');
  +
  +$total = $DB->sqlFetchOne("
  +	SELECT
  +		COUNT(*)
  +	FROM
  +		simin_news
  +");
  +
  +$data = $DB->sqlFetchAll("
  +	SELECT
  +		idx, title, reg_date
  +	FROM
  +		simin_news
  +	ORDER BY
  +		reg_date DESC
  +	LIMIT
  +		$seek, $listnum
  +");
  +
  +@array_walk($data,'cb_format_list');
  +$tpl->define('CONTENT',WebApp::getTemplate('news/admin/list.htm'));
  +$tpl->assign('total',$total);
  +$tpl->assign('list',$data);
  +
  +// {{{ Functions
  +function cb_format_list(&$arr) {
  +	global $total, $seek;
  +	static $num;
  +	$arr['num'] = $total - $seek - $num++;
  +	$arr['int_date'] = strtotime($arr['reg_date']);
  +}
  +// }}}
   ?>
  \ No newline at end of file
  
  
  
  1.2       +37 -37    siminweb/module/news/admin/write.php
  
  Index: write.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/news/admin/write.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- write.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ write.php	5 Dec 2004 03:17:54 -0000	1.2
  @@ -1,38 +1,38 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* ϸ: module/news/admin/write.php
  -* ۼ: 2004-10-31
  -* ۼ: ģ
  -*   :  ۼ
  -*****************************************************************
  -* 
  -*/
  -
  -switch (REQUEST_METHOD) {
  -	case 'GET':
  -		$tpl->define('CONTENT', WebApp::getTemplate('news/admin/write.htm'));
  -		break;
  -	case 'POST':
  -		$subject = $_POST['subject'];
  -		$title = $_POST['title'];
  -		$content = $_POST['content'];
  -		$name = $_POST['name'];
  -		$reg_date = date('Y-m-d H:i:s');
  -
  -		$DB = &WebApp::singleton('DB');
  -		$sql = "
  -			INSERT INTO simin_news
  -				(subject, title, content, name, reg_date)
  -			VALUES
  -				('$subject','$title','$content','$name','$reg_date')
  -		";
  -		if ($DB->query($sql)) {
  -			WebApp::redirect($URL->setVar('act','news.admin.list'));
  -		} else {
  -			WebApp::moveBack(' ۼ ߽ϴ');
  -		}
  -		break;
  -}
  -
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* ϸ: module/news/admin/write.php
  +* ۼ: 2004-10-31
  +* ۼ: ģ
  +*   :  ۼ
  +*****************************************************************
  +* 
  +*/
  +
  +switch (REQUEST_METHOD) {
  +	case 'GET':
  +		$tpl->define('CONTENT', WebApp::getTemplate('news/admin/write.htm'));
  +		break;
  +	case 'POST':
  +		$subject = $_POST['subject'];
  +		$title = $_POST['title'];
  +		$content = $_POST['content'];
  +		$name = $_POST['name'];
  +		$reg_date = date('Y-m-d H:i:s');
  +
  +		$DB = &WebApp::singleton('DB');
  +		$sql = "
  +			INSERT INTO simin_news
  +				(subject, title, content, name, reg_date)
  +			VALUES
  +				('$subject','$title','$content','$name','$reg_date')
  +		";
  +		if ($DB->query($sql)) {
  +			WebApp::redirect($URL->setVar('act','news.admin.list'));
  +		} else {
  +			WebApp::moveBack(' ۼ ߽ϴ');
  +		}
  +		break;
  +}
  +
   ?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:54

  Modified:    module/news read.php
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +27 -27    siminweb/module/news/read.php
  
  Index: read.php
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/module/news/read.php,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- read.php	24 Nov 2004 12:25:20 -0000	1.1
  +++ read.php	5 Dec 2004 03:17:54 -0000	1.2
  @@ -1,28 +1,28 @@
  -<?php
  -/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  -/**
  -* 파일명: module/news/read.php
  -* 작성일: 2004-10-31
  -* 작성자: 거친마루
  -* 설  명: 뉴스 보기
  -*****************************************************************
  -* 
  -*/
  -
  -$id = $_GET['id'];
  -
  -$DB = &WebApp::singleton('DB');
  -$sql = "
  -	SELECT
  -		*
  -	FROM
  -		simin_news
  -	WHERE
  -		idx={$id}
  -";
  -$data = $DB->sqlFetch($sql);
  -
  -$tpl->setLayout('main');
  -$tpl->define('CONTENT', WebApp::getTemplate('news/read.htm'));
  -$tpl->assign($data);
  +<?php
  +/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
  +/**
  +* 파일명: module/news/read.php
  +* 작성일: 2004-10-31
  +* 작성자: 거친마루
  +* 설  명: 뉴스 보기
  +*****************************************************************
  +* 
  +*/
  +
  +$id = $_GET['id'];
  +
  +$DB = &WebApp::singleton('DB');
  +$sql = "
  +	SELECT
  +		*
  +	FROM
  +		simin_news
  +	WHERE
  +		idx={$id}
  +";
  +$data = $DB->sqlFetch($sql);
  +
  +$tpl->setLayout('main');
  +$tpl->define('CONTENT', WebApp::getTemplate('news/read.htm'));
  +$tpl->assign($data);
   ?>
  \ No newline at end of file
  
  
  


comfuture    04/12/05 12:17:54

  Modified:    var      scheme.sql
  Log:
  3ȸ ڵ佺Ʈ ۾
  
  Revision  Changes    Path
  1.2       +4 -3      siminweb/var/scheme.sql
  
  Index: scheme.sql
  ===================================================================
  RCS file: /cvsroot/simin/siminweb/var/scheme.sql,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- scheme.sql	24 Nov 2004 12:25:32 -0000	1.1
  +++ scheme.sql	5 Dec 2004 03:17:54 -0000	1.2
  @@ -20,7 +20,7 @@
   CREATE TABLE simin_money (
   	idx INT NOT NULL PRIMARY KEY auto_increment,
   	uid INT NOT NULL,
  -	money INT NOT NULL DEFAULT 500000,
  +	money INT NOT NULL DEFAULT 10000,
   
   	UNIQUE idx_uid (uid)
   );
  @@ -61,13 +61,14 @@
   
   DROP TABLE IF EXISTS simin_gameroom;
   CREATE TABLE simin_gameroom (
  -	idx INT NOT NULL PRIMARY KEY,
  +	room_id INT NOT NULL PRIMARY KEY,
   	title VARCHAR(100) NOT NULL DEFAULT '',
  +	mem_count TINYINT NOT NULL DEFAULT 0
   ) type=heap;
   
   DROP TABLE IF EXISTS simin_gameroom_member;
   CREATE TABLE simin_gameroom_member (
   	idx INT NOT NULL PRIMARY KEY,
  -	room_no INT NOT NULL,								# simin_gameroom.idx
  +	room_id INT NOT NULL,								# simin_gameroom.room_id
   	user VARCHAR(20) NOT NULL,
   ) type=heap;
  \ No newline at end of file
  
  
  


