";
    print_r($str);
    echo "";
}
/*****************************************************************************************
 * Alert 창을 띄우고 특정 URL로 이동합니다.
 * @param string $msg
 * @param string $url
 ****************************************************************************************/
function alert($msg = '', $url = '')
{
    $CI =&get_instance();
    if (empty($msg)) {
        $msg = lang('common_invalid_request');
    }
    echo '';
    echo '';
    exit;
}
/*****************************************************************************************
 * Alert 창을 띄우고 현재 팝업창을 닫습니다.
 * @param string $msg
 ****************************************************************************************/
function alert_close($msg='', $refresh_parent = FALSE)
{
    $CI =&get_instance();
    if (empty($msg)) {
        $msg = lang('common_invalid_request');
    }
    echo '';
    echo '';
    exit;
}
/*****************************************************************************************
 * 로그인이 필요한 페이지임을 알리고, 로그인 페이지로 이동합니다.
 * @param string $msg
 ****************************************************************************************/
function alert_login($url="members/login")
{
    $CI =&get_instance();
    $url = base_url($url)."?reurl=".current_full_url(TRUE);
    echo '';
    echo '';
    exit;
}
/*****************************************************************************************
 * 관리자용 MODAL 창을 닫고, 메시지를 띄운다.
 * @param string $msg
 * @param mixed $refresh TRUE : 부모창을 새로고침 FALSE : 아무행동안함  String : 입력한 String을 자바스크립트로 실행
 ****************************************************************************************/
function alert_modal_close($msg="", $refresh=FALSE)
{
    if (empty($msg)) {
        $msg = lang('common_invalid_request');
    }
    echo '';
    echo '';
    exit;
}
/*****************************************************************************************
 * 관리자용 MODAL 창을 닫고, 메시지를 띄운다.
 * @param string $msg
 * @param mixed $refresh TRUE : 부모창을 새로고침 FALSE : 아무행동안함  String : 입력한 String을 자바스크립트로 실행
 ****************************************************************************************/
function alert_modal2_close($msg="", $refresh=TRUE)
{
    $CI =&get_instance();
    if (empty($msg)) {
        $msg = lang('common_invalid_request');
    }
    echo '';
    echo '';
    exit;
}
/******************************************************************************************
 * 특정문자열을 암호화하여 내보낸다.
 * @param $string
 * @return string
 *****************************************************************************************/
function get_password_hash($string)
{
    $CI =& get_instance();
    return hash('md5', $CI->config->item('encryption_key') . $string );
}
/****************************************************************************************
 * 배열의 특정 키값을 가져옵니다.
 * @param $item
 * @param $array
 * @param null $default
 * @return mixed|null
 ***************************************************************************************/
function element($item, $array, $default = NULL)
{
    return is_array($array) && array_key_exists($item, $array) &&  $array[$item] ? $array[$item] : $default;
}
/*****************************************************************************************
 * 현재 주소를 Parameter 포함해서 가져온다.
 * @return string
 ****************************************************************************************/
function current_full_url($urlencode = FALSE)
{
    $CI =& get_instance();
    $url = $CI->config->site_url($CI->uri->uri_string());
    $return = ($CI->input->server('QUERY_STRING'))
        ? $url . '?' . $CI->input->server('QUERY_STRING') : $url;
    return $urlencode ?  urlencode($return) : $return;
}
/******************************************************************************************
 * 해당 URL이 우리 서버 도메인을 가르키는지 확인한다.
 * @param $url 체크할 URL
 * @param bool $check_file_exist 파일존재 여부까지 확인한다.
 * @return bool
 *****************************************************************************************/
function is_my_domain($url, $check_file_exist = TRUE) {
    // 처음 시작이 / 이고 두번제 문자가 /이 아닐경우
    if( substr($url,0,1) === '/' && substr($url,1,1) !== '/' )
    {
        if( $check_file_exist ) {
            return file_exists( FCPATH . $url );
        }
        return TRUE;
    }
    if( strpos( $url, base_url()) !== FALSE ) {
        if( $check_file_exist ) {
            return file_exists( FCPATH . str_replace( base_url(), "", $url ));
        }
        return TRUE;
    }
    return FALSE;
}
/******************************************************************************************
 * 업로드를 위한 폴더를 생성한다.
 * @param string $dir
 *****************************************************************************************/
function make_dir($dir = "", $make_date = TRUE, $return_only_filepath = FALSE)
{
    $dir = str_replace("/", DIRECTORY_SEPARATOR, $dir);
    $dirs = explode(DIRECTORY_SEPARATOR, $dir);
    $now_dir = FCPATH;
    foreach($dirs as $dr)
    {
        if( empty($dr) ) continue;
        $now_dir .= DIRECTORY_SEPARATOR . $dr;
        if (is_dir($now_dir) === false) {
            $old = umask(0);
            mkdir($now_dir, 0777);
            umask($old);
        }
    }
    if( $make_date )
    {
        $now_dir .= DIRECTORY_SEPARATOR . date('Y');
        if( is_dir($now_dir) === false )
        {
            $old = umask(0);
            mkdir($now_dir, 0777);
            umask($old);
        }
        $now_dir .= DIRECTORY_SEPARATOR . date('m');
        if( is_dir($now_dir) === false )
        {
            $old = umask(0);
            mkdir($now_dir, 0777);
            umask($old);
        }
    }
    $now_dir .= DIRECTORY_SEPARATOR;
    $now_dir = str_replace(DIRECTORY_SEPARATOR, "/", $now_dir);
    if($return_only_filepath) {
        $fcpath = str_replace(DIRECTORY_SEPARATOR, "/", FCPATH);
        $now_dir = str_replace($fcpath, "", $now_dir);
        $now_dir = str_replace(FCPATH, "", $now_dir);
    }
    return $now_dir;
}
/******************************************************************************************
 * HTML 태그를 제거하고 일반 텍스트로 변경
 *****************************************************************************************/
function get_text($str, $html=0, $restore=false)
{
    $source[] = "<";
    $target[] = "<";
    $source[] = ">";
    $target[] = ">";
    $source[] = "\"";
    $target[] = """;
    $source[] = "\'";
    $target[] = "'";
    if($restore)
        $str = str_replace($target, $source, $str);
    // 3.31
    // TEXT 출력일 경우 &   등의 코드를 정상으로 출력해 주기 위함
    if ($html === 0) {
        $str = html_symbol($str);
    }
    if ($html) {
        $source[] = "\n";
        $target[] = "
";
    }
    return str_replace($source, $target, $str);
}
/**
 * HTML 이 포함된 내용에서 요약본을 TEXT 형태로 뽑아낸다.
 * @param $str
 * @param bool $nl2br
 * @return mixed
 */
function get_summary($str, $nl2br = FALSE)
{
    $str = html_entity_decode($str);
    $str = strip_tags($str);
    if($nl2br) {
        $str = nl2br($str);
    }
    else {
        $str = str_replace("\n","",$str);
    }
    return get_text($str, $nl2br);
}
/**
 * 파일 사이즈를 알기쉽게 표기
 * @param $bytes
 * @param int $decimals
 * @return string
 */
function format_size($bytes, $decimals = 2) {
    $size = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
    $factor = floor((strlen($bytes) - 1) / 3);
    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];
}
/******************************************************************************************
 * HTML SYMBOL 변환
 *   & · 등을 정상으로 출력
 *****************************************************************************************/
function html_symbol($str)
{
    return preg_replace("/\&([a-z0-9]{1,20}|\#[0-9]{0,3});/i", "&\\1;", $str);
}
/******************************************************************************************
 * 에디터를 호출한다.
 *****************************************************************************************/
function get_editor($name, $contents="", $class="", $is_dhtml_editor = true, $editor_type = 'ckeditor')
{
    $param['id'] = $name;
    $param['name'] = $name;
    $param['height'] = '300px';
    $param['contents'] = $contents;
    $CI =& get_instance();
    if( $editor_type == 'smarteditor' && $is_dhtml_editor )
    {
        $param['editor_url'] = base_url('/plugins/smarteditor-2.9.0');
        $CI->site->add_js( $param['editor_url'] . "/js/service/HuskyEZCreator.js");
        $return = $CI->load->view("tools/".$editor_type, $param, TRUE);
    }
    else if ( $editor_type == 'ckeditor' && $is_dhtml_editor )
    {
        $param['editor_url'] = base_url('/plugins/ckeditor');
        $CI->site->add_js( $param['editor_url'] . "/ckeditor.js");
        $CI->site->add_js( $param['editor_url'] . "/config.js");
        $return = $CI->load->view("tools/".$editor_type, $param, TRUE);
    }
    else {
        $return = "\n";
    }
    return $return;
}
/*****************************************************************************************
 * 글자수를 잘라서 보여줍니다.
 * @param string $msg
 ****************************************************************************************/
function cut_str($str = '', $len = '', $suffix = '…')
{
    return mb_substr($str,0,$len) . $suffix;
}
/***************************************************************************************
 * 날짜를 일정 형식으로 보여줍니다.
 * @param $date
 * @return false|string
 **************************************************************************************/
function display_datetime($datetime = '', $type = '', $custom = '')
{
    $CI =& get_instance();
    if (empty($datetime)) {
        return false;
    }
    $datetime = is_int($datetime) ? $datetime :  strtotime($datetime);
    if ($type === 'sns') {
        $diff = time() - $datetime;
        $s = 60; //1분 = 60초
        $h = $s * 60; //1시간 = 60분
        $d = $h * 24; //1일 = 24시간
        $y = $d * 10; //1년 = 1일 * 10일
        if ($diff < $s) {
            $result = $diff . langs('공통/time/second_ago');
        } elseif ($h > $diff && $diff >= $s) {
            $result = round($diff/$s) . langs('공통/time/minute_ago');
        } elseif ($d > $diff && $diff >= $h) {
            $result = round($diff/$h) . langs('공통/time/hour_ago');
        } elseif ($y > $diff && $diff >= $d) {
            $result = round($diff/$d) . langs('공통/time/days_ago');
        } else {
            if (date('Y-m-d', $datetime) == date('Y-m-d')) {
                $result = date('H:i', $datetime);
            } else {
                $result = date('Y.m.d', $datetime);
            }
        }
    } elseif ($type === 'user' && $custom) {
        return date($custom, $datetime);
    } elseif ($type === 'full') {
        if (date('Y-m-d', $datetime) == date('Y-m-d')) {
            $result = date('H:i', $datetime);
        } elseif (date('Y', $datetime) === date('Y')) {
            $result = date('m-d H:i', $datetime);
        } else {
            $result = date('Y-m-d', $datetime);
        }
    } else {
        if (date('Y-m-d', $datetime) === date('Y-m-d')) {
            $result = date('H:i', $datetime);
        } else {
            $result = date('Y.m.d', $datetime);
        }
    }
    return $result;
}
/****************************************************
 * IP를 일정형식으로 변환하여 보여줍니다.
 * @param string $ip
 * @param string $type
 * @return bool|mixed
 ***************************************************/
function display_ipaddress($ip = '', $type = '0001')
{
    if( empty($type) )
    {
        $CI =& get_instance();
        $type = $CI->site->config('style_ip_display');
    }
    if (empty($ip)) {
        return false;
    }
    $regex = '';
    $regex .= ($type[0] === '1') ? '\\1' : '♡';
    $regex .= '.';
    $regex .= ($type[1] === '1') ? '\\2' : '♡';
    $regex .= '.';
    $regex .= ($type[2] === '1') ? '\\3' : '♡';
    $regex .= '.';
    $regex .= ($type[3] === '1') ? '\\4' : '♡';
    return preg_replace("/([0-9]+).([0-9]+).([0-9]+).([0-9]+)/", $regex, $ip);
}
/**
 * HTML 스타일의 내용을 가공해서 가져온다.
 * @param string $content HTML태그를 포함한 내용
 * @param int $thumb_width  썸네일 너비
 * @param bool $autolink    URL에 자동링크 여부
 * @param bool $popup   링크를 팝업으로 띄울것인가?
 * @param bool $writer_is_admin 글 작성자가 관리자인가?
 * @return mixed|string
 */
function display_html_content($content = '', $thumb_width=700)
{
    $source = array();
    $target = array();
    $source[] = '//';
    $target[] = '';
    $source[] = "/<\?xml:namespace prefix = o ns = \"urn:schemas-microsoft-com:office:office\" \/>/";
    $target[] = '';
    // 테이블 태그의 갯수를 세어 테이블이 깨지지 않도록 한다.
    $table_begin_count = substr_count(strtolower($content), '