/**
 * @copyright 2009 NTT Communications
 * @author    NTT Communications CO.,LTD.
 * @version   $Id$
 * @link      http://photofriend.jp/
 */

var C_PTB_NUMBER_FORMAT_ERROR = "正しい数値を入力してください。";
var C_PTB_INITIAL_SIZE_IS_ZERO_ERROR = "写真がありません。";
var C_PTB_ERROR_DIV = "dlg_paste_to_blog_err";
var C_PTB_CURRENT_PHOTO_WIDTH = "current_photo_width";
var C_PTB_CURRENT_PHOTO_HEIGHT = "current_photo_height";
var C_PTB_KEEP_ASPECT = "keep_aspect";
var C_PTB_SCRIPT = "dlg_paste_to_blog_script";
var C_PTB_IFRAME = "dlg_paste_to_blog_iframe";
var C_PTB_PHOTO_THUMNAIL_L = "photo_thumnail_l";
var C_PTB_DUMMY_PREVIEW = "dlg_paste_to_blog_dummy_preview";
var C_PTB_TIMER_DURATION = 1000;

var initial_photo_width = 0;    // 初期写真幅
var initial_photo_height = 0;   // 初期写真高さ
var previous_photo_width = 0;    // 直前の写真幅
var previous_photo_height = 0;   // 直前の写真高さ

var blog_script_template = null;  // ブログに貼るスクリプトのテンプレート
var ptb_blog_script_obj = null;  // ブログに貼るスクリプトのテンプレートオブジェクト(div付き)
var current_script = null;          // 現在表示しているスクリプト。変化したら更新

var PTB_timerId = null;
/**
 * インナーフレーム内へのdocumentを取得する
 */
function PTB_getIFrameDocument(id) {
    var ifdoc = null;
    if (ie) {
        ifdoc = frames[id].document;
    } else {
        if (document.getElementById(id) == null) {
            return null;
        }
        ifdoc = document.getElementById(id).contentDocument;
    }
    return ifdoc;
}

/**
 * onLoadイベントオブジェクトを取得する
 */
function PTB_getEvent(ev) {
    var ret = null;
    if (ie) {
        ret = window.event;
    } else {
        ret = ev.target;
    }
    return ret;
}

/**
 * すべての子ノードを削除する
 *
 */
function PTB_deleteChilds(obj)
{
    if (obj) {
        for (var i = obj.childNodes.length - 1; i >= 0 ; --i) {
            obj.removeChild(obj.childNodes[i]);
        }
    }
}

/**
 * ダイアログ表示時の処理
 */
function PTB_OpenDialog(ev) {
    var current_photo_width = document.getElementById(C_PTB_CURRENT_PHOTO_WIDTH);
    var current_photo_height = document.getElementById(C_PTB_CURRENT_PHOTO_HEIGHT);
    current_photo_width.value = initial_photo_width;
    current_photo_height.value = initial_photo_height;

    if (initial_photo_width == 0 || initial_photo_height == 0) {
        document.getElementById(C_PTB_ERROR_DIV).innerHTML = C_PTB_INITIAL_SIZE_IS_ZERO_ERROR;
    }

    // スクリプト書き換え
    PTB_update_script();

    PTB_timerId = setTimeout(PTB_redrawPreview, C_PTB_TIMER_DURATION);
    // プレビュー領域書き換え
//    PTB_redrawPreview();
}

/**
 * ダイアログ表示時の処理
 */
function PTB_CloseDialog(ev) {
    Control.Modal.cancelClose();
}

/**
 * 初期写真サイズ設定
 */
function PTB_initializePhotoSize(ev) {
    var e = PTB_getEvent(ev);
    var photo_thumnail_l = document.getElementById(C_PTB_PHOTO_THUMNAIL_L);
    initial_photo_width = photo_thumnail_l.width;
    initial_photo_height = photo_thumnail_l.height;
}

/**
 * プレビュー更新
 */
function PTB_redrawPreview() {
    if (PTB_timerId) {
        clearTimeout(PTB_timerId);
        PTB_timerId = null;
    }
    var ifdoc = PTB_getIFrameDocument(C_PTB_IFRAME);
    var tf = document.getElementById(C_PTB_SCRIPT).value;
    var preview = ifdoc.createElement("div");
    preview.innerHTML = tf;
    // anchor タグからリンク先情報を削除
    var anchors = preview.getElementsByTagName("a");
    for(var idx = 0 ; idx < anchors.length; idx++) {
        anchors[idx].setAttribute("href", "javascript:void(0);");
        anchors[idx].setAttribute("onclick", "javascript:void(0);");
        anchors[idx].setAttribute("target", "");
        anchors[idx].setAttribute("oncontextmenu", "return false;");
    }
    // img タグからコンテキストメニューを削除
    var imgs = preview.getElementsByTagName("img");
    for(idx = 0 ; idx < imgs.length; idx++) {
        imgs[idx].setAttribute("oncontextmenu", "return false;");
        if (ie) {
            // ieではうまくいかないので別の方法を行う
            imgs[idx].attachEvent("oncontextmenu", function() {return false;});
        }
    }

    // 子要素をすべて削除
    PTB_deleteChilds(ifdoc.body);

    // ifrmaeに書き込み
    ifdoc.body.appendChild(preview);
}

/**
 * スクリプト表示更新
 */
function PTB_update_script() {
    // 書き換え用オブジェクト設定
    var tf = document.getElementById(C_PTB_SCRIPT).value
    ptb_blog_script_obj = document.createElement("div");
    ptb_blog_script_obj.innerHTML = tf;

    // 幅と高さ設定
    var photo_thumnail_l_src = document.getElementById(C_PTB_PHOTO_THUMNAIL_L).getAttribute("src");
    var ptb_images = ptb_blog_script_obj.getElementsByTagName("img");
    for (var idx = 0; idx < ptb_images.length; idx++) {
        var imageobj = ptb_images[idx];
        var src = imageobj.getAttribute("src");
        if (src != null && src.indexOf(photo_thumnail_l_src, 0) >= 0) {
            // 書き換え対象を見つけた
            var width = document.getElementById(C_PTB_CURRENT_PHOTO_WIDTH).value;
            if (width == "") {
                // 属性削除
                imageobj.removeAttribute("width");
            } else {
                imageobj.setAttribute("width", width);
            }
            var height = document.getElementById(C_PTB_CURRENT_PHOTO_HEIGHT).value;
            if (height == "") {
                // 属性削除
                imageobj.removeAttribute("height");
            } else {
                imageobj.setAttribute("height", height);
            }
        }
    }
    document.getElementById(C_PTB_SCRIPT).value = ptb_blog_script_obj.innerHTML;
}

/**
 * クリップボードにコピーする
 */
function PTB_cop_to_clipboard() {
    var ta = document.getElementById(C_PTB_SCRIPT);
//    if (ie) {
        // ieはクリップボードにコピーできる
//        window.clipboardData.setData("text", ta.value);
//    } else {
        // ie以外はできないので選択するのみ
        ta.select();
//    }
}

/**
 *
 */
function PTB_onFocusFromWidth() {
    previous_photo_width = document.getElementById(C_PTB_CURRENT_PHOTO_WIDTH).value;
}

/**
 *
 */
function PTB_onBlurFrom(dim) {
    var base = C_PTB_CURRENT_PHOTO_WIDTH;
    var target = C_PTB_CURRENT_PHOTO_HEIGHT;
    var base_val = initial_photo_width;
    var target_val = initial_photo_height;
    var previous_val = previous_photo_width;
    if (dim == "height") {
        base = C_PTB_CURRENT_PHOTO_HEIGHT;
        target = C_PTB_CURRENT_PHOTO_WIDTH;
        base_val = initial_photo_height;
        target_val = initial_photo_width;
        previous_val = previous_photo_height;
    }
    var ptb_err = false;
    var ka = document.getElementById(C_PTB_KEEP_ASPECT);
    var ptb_obj = document.getElementById(base);
    var val = ptb_obj.value;
    if (val.match(/^[\d]{0,3}$/) == null || val.match(/^0$/)) {
        // エラー
        ptb_err = true;
    } else if (previous_val == val) {
        // do nothing
    } else if (ka.checked && val != "") {
        var oppositeval = Math.round(target_val * val /  base_val);
        if (isNaN(oppositeval) || oppositeval < 1 || oppositeval > 999) {
            // エラー
            ptb_err = true;
        } else {
            document.getElementById(target).value = oppositeval;
        }
    }
    if (ptb_err) {
        ptb_obj.value = previous_val;
        document.getElementById(C_PTB_ERROR_DIV).innerHTML = C_PTB_NUMBER_FORMAT_ERROR;
    } else {
        // スクリプト書き換え
        PTB_update_script();
        // プレビュー領域書き換え
        PTB_redrawPreview();
        PTB_deleteChilds(document.getElementById(C_PTB_ERROR_DIV));
    }
}

/**
 *
 */
function PTB_onFocusFromHeight() {
    previous_photo_height = document.getElementById(C_PTB_CURRENT_PHOTO_HEIGHT).value;
}
