﻿// JScript 文件
/*********************************************************/
/*                     扩展函数库                        */
/*                   功能：一些常用函数                  */
/*                     Author:Mr shao                    */
/*********************************************************/

/// <summary>
/// 兼容FireFox的insertAdjacentHTML方法
/// <param name="where">插入位置,包括beforeBegin,beforeEnd,afterBegin,afterEnd</param>
/// <param name="el">用于参照插入位置的html元素对象</param>
/// <param name="html">要求插入的html代码</param>
/// </summary>
function insertHtml(where, el, html){
        where = where.toLowerCase();
        if(el.insertAdjacentHTML){
            switch(where){
                case "beforebegin":
                    el.insertAdjacentHTML('BeforeBegin', html);
                    return el.previousSibling;
                case "afterbegin":
                    el.insertAdjacentHTML('AfterBegin', html);
                    return el.firstChild;
                case "beforeend":
                    el.insertAdjacentHTML('BeforeEnd', html);
                    return el.lastChild;
                case "afterend":
                    el.insertAdjacentHTML('AfterEnd', html);
                    return el.nextSibling;
            }
            throw 'Illegal insertion point -> "' + where + '"';
        }
  var range = el.ownerDocument.createRange();
        var frag;
        switch(where){
             case "beforebegin":
                range.setStartBefore(el);
                frag = range.createContextualFragment(html);
                el.parentNode.insertBefore(frag, el);
                return el.previousSibling;
             case "afterbegin":
                if(el.firstChild){
                    range.setStartBefore(el.firstChild);
                    frag = range.createContextualFragment(html);
                    el.insertBefore(frag, el.firstChild);
                    return el.firstChild;
                }else{
                    el.innerHTML = html;
                    return el.firstChild;
                }
            case "beforeend":
                if(el.lastChild){
                    range.setStartAfter(el.lastChild);
                    frag = range.createContextualFragment(html);
                    el.appendChild(frag);
                    return el.lastChild;
                }else{
                    el.innerHTML = html;
                    return el.lastChild;
                }
            case "afterend":
                range.setStartAfter(el);
                frag = range.createContextualFragment(html);
                el.parentNode.insertBefore(frag, el.nextSibling);
                return el.nextSibling;
            }
            throw 'Illegal insertion point -> "' + where + '"';
}
/// <summary>
/// 兼容FireFox的手动触发事件
/// <param name="obj">目标元素</param>
/// <param name="eventName">事件名称如"click",注意不要加"on"</param>
/// <param name="eventType">事件类型HTMLEvents,UIEvents,MouseEvents,MutationEvents</param>
/// <param name="canBubble">事件是否起泡</param>
/// <param name=""cancelable>是否可以用preventDefault()方法取消事件</param>
/// </summary>
function fireEvent(obj,eventName,eventType,canBubble,cancelable)
{
    var o = document.getElementById(obj);
    if(o == null) return;
    if(document.all)
    {
       o.fireEvent("on"+eventName);
    }
    else
    {
       var e = document.createEvent(eventType);
       e.initEvent(eventName,canBubble,cancelable);
       o.dispatchEvent(e);
    }
}
/// <summary>
/// 兼容FireFox的在指定光标位置插入文本或代码
/// <param name="el">插入的元素</param>
/// <param name="where">插入位置</param>
/// <param name="ishtml">是否html插入</param>
/// </summary>
function insertByCursor(el,where,ishtml)
{
    var tc = document.getElementById(where);
    var tclen = tc.value.length;
    //tc.focus();
    if(typeof document.selection != "undefined")
    {
       if(!ishtml)
          {document.selection.createRange().text = el;}
       else
          {document.selection.createRange().pasteHTML(el);}
    }
    else
    {
       tc.value = tc.value.substr(0,tc.selectionStart) + el + tc.value.substring(tc.selectionStart,tclen);
    }
}