﻿//使用场景： A. 本js嵌入aspx页面中和TextBox输入框一起，形成区域查找功能
//           B. 本js嵌入一个页面中,这个页面有一个iframe 元素,在ifame 元素中
//              嵌入另一个页面,这个页面里含有一个textBox 输入框.js和这个
//              输入框一起,形成区域查找功能. 
//限制情况:  B场景下,假定只有一个iframe元素

//global variables
// is an IE explore
var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
//the relatedInputBox may be in the same page
//with the popdiv or in the iframe page 
var relatedInputBoxid = '';

//abbr for get element
function AP_GetByID(objID) {
    return document.getElementById(objID);
}

//cancel event bubble
function _cancelAreaBubble(event) {
    e = event ? event : window.event;
    if (ie) {
        e.cancelBubble = true;
    } else {
        e.stopPropagation();
    }
}


//get iframe window 假定内嵌只有一个iframe
function getIframeWindow() {
    if (typeof (document.getElementById("SearchForm")) != undefined) {
        return window.frames["SearchForm"];

    }
    else {
        return window.frames[0];
    }
}
//create div pop area select
//parameter arrareas contarin string
//which is separated by '|'
function CreatePopdiv(arrareas, reltextboxid) {
    if (reltextboxid != null && reltextboxid != '') {
        relatedInputBoxid = reltextboxid;
    }
    var arrRegions = arrareas.split('|');
    var trs = '';
    var arrindex = 0;
    var rowCount = 0;
    if (arrRegions.length > 0) {
        var arrProvinceName = new Array();
        for (var rlen = 0; rlen < (arrRegions.length - 1); rlen++) {
            arrProvinceName[rlen] = arrRegions[rlen];
        }


        rowCount = Math.ceil(arrProvinceName.length / 5);

        for (var rowindex = 0; rowindex < rowCount; rowindex++) {
            trs += '<tr>';
            for (var colindex = 0; colindex < 5; colindex++) {
                if ((rowindex * 5 + colindex) < arrProvinceName.length) {
                    trs += '<td style="border:0px; border-bottom:1px #BCD0E8 solid;"><span style="color:#648BB1; cursor: pointer;" onclick="javascript:ontblClick(event);">' + arrProvinceName[rowindex * 5 + colindex] + '</span></td>'
                }
                else {
                    trs += '<td style="border:0px;"></td>'
                }
            }
            trs += "</tr>"
        }
    }

    s = '';
    s += '<div id="popareadiv"   style="display:none; position:absolute; z-index:9;" >';
    if (ie) {  // i don't know why add a frame
        // s += '<iframe id="iespecificframe" width="200" border="0"  src="about:blank" style="position: absolute;z-index:-1;"></iframe>';
    }
    s += '<div style="width: 200px; background:#ffffff;"><table  cellspacing="0" cellpadding="0" width="100%" style="text-align: center;border:1px #BCD0E8 solid;">';
    s += '<tr><td id="headtd" class="headtd"  colspan="5" align="left" style="background: #DAE8F1; font-size:14px; font-weight:bold; color:#A00401; line-height:20px;" >' + '区域列表' + '</td></tr> ';
    s += trs;
    s += '</table></div></div>';
    var nElement = document.createElement("div");
    nElement.innerHTML = s;

    //if the document contains form element,append child to it(important)
//    if (document.getElementsByTagName("form")[0]) {
//        document.getElementsByTagName("form")[0].appendChild(nElement);
//    }
//    else 
    { //if not form element,append child to body 
        document.getElementsByTagName("body")[0].appendChild(nElement);
    }
    document.onclick = function(event) { AP_GetByID('popareadiv').style.display = 'none'; }

    if (getIframeWindow() != null) {  //if the page contains frame window ,then click in the frame window,should close the div dialog
        getIframeWindow().document.onclick = function(event) { AP_GetByID('popareadiv').style.display = 'none'; }
    }

    AP_GetByID('popareadiv').onclick = function(event) { _cancelAreaBubble(event); }
}



//compute position
function showAreaPopup(event, iframewindow, txtinputid) {
    var p = getareaSelectposition(txtinputid);
    AP_GetByID('popareadiv').style.top = String(p['y']) + 'px';
    AP_GetByID('popareadiv').style.left = String(p['x']) + 'px';
    AP_GetByID('popareadiv').style.display = 'block';
    _cancelAreaBubble(event);

}


function HideAreaPopup(event) {
    AP_GetByID('popareadiv').style.display = 'none';
}


//click the item showed on 
//the popup window
function ontblClick(event) {
    e = event ? event : window.event;
    var elem = e.srcElement ? e.srcElement : e.target;
    if (getIframeWindow() != null) {
        getIframeWindow().document.getElementById(relatedInputBoxid).value = elem.innerHTML;

    }
    else // no frames at all.
    {
        document.getElementById(relatedInputBoxid).value = elem.innerHTML;
    }

    HideAreaPopup(event);
}



//get the top-left position that the popup should
//show
function getareaSelectposition(objid) {
    var r = new Array();
    if (getIframeWindow() != null)  //window.frames[0]
    {
        //txt position in the iframe
        var txtPos = new Array(); //txtbox in the frame offset
        var objinframe = getIframeWindow().document.getElementById(objid);
        txtPos['y'] = objinframe.offsetTop + objinframe.clientHeight + 5;
        txtPos['x'] = objinframe.offsetLeft;
        while (objinframe = objinframe.offsetParent) {
            txtPos['y'] += objinframe.offsetTop;
            txtPos['x'] += objinframe.offsetLeft;
        }


        //iframe position in the parent page
        var iframePos = new Array();
        var elemIframe = getIframeWindow().frameElement;
        iframePos['y'] = elemIframe.offsetTop;
        iframePos['x'] = elemIframe.offsetLeft;
        while (elemIframe = elemIframe.offsetParent) {
            iframePos['y'] += elemIframe.offsetTop;
            iframePos['x'] += elemIframe.offsetLeft;
        }


        //return result
        r['y'] = iframePos['y'] + txtPos['y'];
        r['x'] = iframePos['x'] + txtPos['x'];

    }
    else // no frames at all.
    {
        var obj = document.getElementById(objid);
        r['y'] = obj.offsetTop + obj.clientHeight + 5;
        r['x'] = obj.offsetLeft;
        while (obj = obj.offsetParent) {
            r['y'] += obj.offsetTop;
            r['x'] += obj.offsetLeft;
        }
    }

    return r;
}


