var wig_path;
var arry = document.getElementsByTagName('script');
var re = new RegExp("^(.*)/Qwig\.js$");
for(var n=0; n<arry.length; n++) {
    if(arry[n].getAttribute('src')) {
        var arry_sub = arry[n].getAttribute('src').match(re);
        if(arry_sub) {
            wig_path = arry_sub[1];
            break;
        }
    }
}

var wig_skin = 'skin_gray';
var wig_css = document.createElement('link');
wig_css.setAttribute('href',wig_path+'/'+wig_skin+'/'+'Qwig.css');
wig_css.setAttribute('rel','stylesheet');
wig_css.setAttribute('type','text/css');
document.getElementsByTagName('head')[0].appendChild(wig_css);

var wig_min_wdth = 300;
var wig_min_hght = 200;
var wig_clpbrd;

// form, textarea, editor, iframe, toolbox, switch, range, mode, WYSIWYG, HTML, TEXT
// frm , txtar   , edtr  , ifrm  , tlbx   , swtch , rng  , mode, WYSIWYG, HTML, TEXT
var wig_objcts = new Array();
var wig_swtchs = new Array();
var wig_inputs = new Array();
var wig_cmmnds = new Array();
var wig_fonts  = new Array('arial','courier new','gulim','tahoma','fixedsys');

function  Qwig_push(cmmnd,ttl,w_img,h_img,inpt) {
    var arry = new Array(cmmnd,ttl,w_img,h_img,inpt);
    wig_cmmnds.push(arry);
}

// tools & order ---------------------------------------------------------------
Qwig_push('fontname'           ,'font family'     ,50,20,true);
Qwig_push('fontsize'           ,'font size 1-7'   ,50,20,true);
Qwig_push('bold'               ,'bold'            ,20,20);
Qwig_push('italic'             ,'italic'          ,20,20);
Qwig_push('underline'          ,'underline'       ,20,20);
Qwig_push('strikethrough'      ,'line through'    ,20,20);
Qwig_push('forecolor'          ,'text color'      ,20,20,true);
Qwig_push('backcolor'          ,'background color',20,20,true);
Qwig_push('seperator');
Qwig_push('subscript'          ,'subscript'       ,20,20);
Qwig_push('superscript'        ,'superscript'     ,20,20);
Qwig_push('justifyleft'        ,'align left'      ,20,20);
Qwig_push('justifycenter'      ,'align center'    ,20,20);
Qwig_push('justifyright'       ,'align right'     ,20,20);
Qwig_push('justifyfull'        ,'align full'      ,20,20);
Qwig_push('indent'             ,'indent'          ,20,20);
Qwig_push('outdent'            ,'outdent'         ,20,20);
Qwig_push('insertorderedlist'  ,'ordered list'    ,20,20);
Qwig_push('insertunorderedlist','unordered list'  ,20,20);
Qwig_push('seperator');
Qwig_push('delete'             ,'delete'          ,20,20);
Qwig_push('copy'               ,'copy'            ,20,20);
Qwig_push('cut'                ,'cut'             ,20,20);
Qwig_push('paste'              ,'paste'           ,20,20);
Qwig_push('seperator');
Qwig_push('undo'               ,'undo'            ,20,20);
Qwig_push('redo'               ,'redo'            ,20,20);
Qwig_push('seperator');
Qwig_push('table'              ,'insert table'    ,20,20,true);
Qwig_push('createlink'         ,'attach link'     ,20,20,true);
Qwig_push('insertimage'        ,'insert image'    ,20,20,true);
Qwig_push('seperator');
Qwig_push('about'              ,'about'           ,20,20,true);
// --------------------------------------------------------------- tools & order

wig_swtchs[0] = new Array('WYSIWYG','WYSIWYG editor','icn_wysiwyg.gif',15,15);
wig_swtchs[1] = new Array('TEXT'   ,'Raw Text'      ,'icn_text.gif'   ,15,15);
//No HTML Mode: wig_swtchs[2] = new Array('HTML'   ,'HTML View'     ,'icn_html.gif'   ,15,15);

function Q_preload() {
    for(var n=0; n<wig_swtchs.length; n++) {
        var img = document.createElement('img');
        img.setAttribute('src',wig_path+'/'+wig_skin+'/'+wig_swtchs[n][2]);
        img.style.width       = '0px';
        img.style.height      = '0px';
        img.style.borderWidth = '0px';
        img.style.margin      = '0px';
        img.style.visibility  = 'hidden';
        document.getElementsByTagName('body').item(0).appendChild(img);
    }
    for(var n=0; n<wig_cmmnds.length; n++) {
        var img = document.createElement('img');
        img.setAttribute('src',wig_path+'/'+wig_skin+'/'+wig_cmmnds[n][0]+'.gif');
        img.style.width       = '0px';
        img.style.height      = '0px';
        img.style.borderWidth = '0px';
        img.style.margin      = '0px';
        img.style.visibility  = 'hidden';
        document.getElementsByTagName('body').item(0).appendChild(img);
    }
}



// basic functions =============================================================
function Qwig_left(objct,lft) {
    if(!lft) lft = 0; lft += objct.offsetLeft;
    var prnt = objct.offsetParent;
    if(prnt) return Qwig_left(prnt,lft); else return lft;
}

function Qwig_top(objct,top) {
    if(!top) top = 0; top += objct.offsetTop;
    var prnt = objct.offsetParent;
    if(prnt) return Qwig_top(prnt,top); else return top;
}

function Qwig_view() {
    if (document.all) {
        document.body.innerText = document.body.innerHTML;
    } else {
        var source = dcmnt.createTextNode(document.body.innerHTML);
        dcmnt.body.innerHTML = "";
        dcmnt.body.appendChild(source);
    }
}

function Qwig_editable(indx,bool) {
    var dcmnt = wig_objcts[indx]['ifrm'].contentWindow.document;
    if(dcmnt.body.contentEditable) { // this produces the auto-focus problem.
        if(bool) dcmnt.body.contentEditable = true;
        else     dcmnt.body.contentEditable = false;
        wig_objcts[indx]['ifrm'].onfocus = function() { wig_objcts[indx]['ifrm'].contentWindow.focus(); };
    } else {
        if(bool) dcmnt.designMode = 'on';
        else     dcmnt.designMode = 'off';
    }
}
// ============================================================= basic functions



// tool related ================================================================
function Qwig_hide(indx) {
    for(var n=0; n<wig_inputs[indx].length; n++) wig_inputs[indx][n].style.visibility = 'hidden';
}

function Qwig_remember(indx) {
    var range;
    var wndw = wig_objcts[indx]['ifrm'].contentWindow;
    wndw.focus();
    if(wndw.document.selection)  range = wndw.document.selection.createRange();
    else if(wndw.getSelection()) range = wndw.getSelection();
    wig_objcts[indx]['rng'] = range;
}

function Qwig_reselect(indx) {
    var wndw = wig_objcts[indx]['ifrm'].contentWindow;
    wndw.focus();
    if(wndw.document.selection) {
        var slctn = wndw.document.selection;
        if(slctn!=null) {
            var tmp_rng = slctn.createRange();
            tmp_rng = wig_objcts[indx]['rng'];
            tmp_rng.select();
        }
    }
}

function Qwig_getHTML(range) {
    var html;
    if(document.selection) {
        html = range.htmlText;
    } else if(window.getSelection()) {
        if(range.rangeCount > 0 && window.XMLSerializer){
            range = range.getRangeAt(0);
            html = new XMLSerializer().serializeToString(range.cloneContents());
        }
    }
    return html;
}

function Qwig_insertHTML(indx,strng) {
    Qwig_reselect(indx);
    var dcmnt = wig_objcts[indx]['ifrm'].contentWindow.document;
    if(document.all) dcmnt.selection.createRange().pasteHTML(strng);
    else             dcmnt.execCommand('inserthtml',false,strng);
}

function Qwig_execute(indx,cmmnd,optn) {
    Qwig_reselect(indx);
    var dcmnt = wig_objcts[indx]['ifrm'].contentWindow.document;
    switch(cmmnd) {
        case 'copy':
            wig_clpbrd = Qwig_getHTML(wig_objcts[indx]['rng']);
            break;
        case 'cut':
            wig_clpbrd = Qwig_getHTML(wig_objcts[indx]['rng']);
            dcmnt.execCommand('delete',false,null);
            break;
        case 'paste':
            Qwig_insertHTML(indx,wig_clpbrd);
            break;
        case 'createlink':
            var html = Qwig_getHTML(wig_objcts[indx]['rng']);
            if(html) Qwig_insertHTML(indx,"<a href='"+optn+"' target='_blank'>"+html+"</a>");
            else window.alert('Not Selected.');
            break;
        default:
            dcmnt.execCommand(cmmnd,false,optn);
    }
}

function Qwig_click(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    var indx = trgt['indx'];
    Qwig_hide(indx);
    Qwig_remember(indx);
    if(trgt['inpt']) {
        trgt['chld'].style.visibility = 'visible';
    } else Qwig_execute(indx,trgt['cmmnd'],'');
}

function Qwig_over(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    trgt.className = 'wig_tool_img_ovr';
}
function Qwig_out(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    trgt.className = 'wig_tool_img';
}
function Qwig_down(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    trgt.className = 'wig_tool_img_dwn';
}
function Qwig_up(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    trgt.className = 'wig_tool_img_ovr';
}

// ================================================================ tool related



// mode related ================================================================
function Qwig_remove(objct,type,fnctn,useCapture) {
    if (objct.removeEventListener) {
        objct.removeEventListener(type,fnctn,useCapture);
        return true;
    } else if (objct.detachEvent) {
        var rtrn = objct.detachEvent('on'+type,fnctn);
        return rtrn;
    }
}

function Qwig_write(indx,strng) {
    var objct = wig_objcts[indx]['ifrm'].contentWindow.document;
    var html = '';
    html += "<!DOCTYPE html\n";
    html += "     PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'\n";
    html += "    'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n";
    html += "<html>\n";
    html += "    <head>\n";
    html += "        <title></title>\n";
    html += "        <style type='text/css'>\n";
    html += "            iframe,p,pre,div,form,object,img,table,td { padding:0px; border-width:0px; margin:0px; }\n";
    html += "            body,table { font-family:arial; font-size:12px; }\n";
    html += "            body {\n";
    html += "                scrollbar-base-color:       #FFFFFF;\n";
    html += "                scrollbar-3dlight-color:    #FFFFFF;\n";
    html += "                scrollbar-highlight-color:  #CCCCCC;\n";
    html += "                scrollbar-face-color:       #FFFFFF;\n";
    html += "                scrollbar-arrow-color:      #CCCCCC;\n";
    html += "                scrollbar-shadow-color:     #CCCCCC;\n";
    html += "                scrollbar-darkshadow-color: #FFFFFF;\n";
    html += "                scrollbar-track-color:      #FFFFFF;\n";
    html += "            }\n";
    html += "        </style>\n";
    html += "    </head>\n";
    html += "    <body>";
    html += strng;
    html += "</body>\n";
    html += "</html>\n";
    objct.open();
    objct.write(html);
    objct.close();
}

function Qwig_store(indx) {
    var txtar = wig_objcts[indx]['txtar'];
    var dcmnt = wig_objcts[indx]['ifrm'].contentWindow.document;
    switch(wig_objcts[indx]['mode']) {
        case 'WYSIWYG':
            // This makes 'undo' and 'redo' disable.
            txtar.value = dcmnt.body.innerHTML;
            break;
        case 'HTML':
            if(document.all) {
                txtar.value = dcmnt.body.innerText;
            } else {
                var source = dcmnt.body.ownerDocument.createRange();
                source.selectNodeContents(dcmnt.body);
                txtar.value = source.toString();
            }
            break;
    }
}

function Qwig_change(indx,mode) {
    var frmr  = wig_objcts[indx]['mode'];
    var txtar = wig_objcts[indx]['txtar'];
    var dcmnt = wig_objcts[indx]['ifrm'].contentWindow.document;
    Qwig_store(indx);

    switch(mode) {
        case 'WYSIWYG':
            // for FF cursor to be visible
            if(!txtar.value) txtar.value = '<br />';
            dcmnt.body.innerHTML = txtar.value;
            wig_objcts[indx]['tlbx'].style.visibility = 'visible';
            wig_objcts[indx]['edtr'].style.zIndex = wig_objcts[indx]['txtar'].style.zIndex+1;
            // prevent from working for initial
            if(frmr) wig_objcts[indx]['ifrm'].contentWindow.focus();

            wig_objcts[indx]['WYSIWYG'].className = 'wig_swtch_img_on' ;
            //No HTML Mode: wig_objcts[indx]['HTML'].className    = 'wig_swtch_img_off';
            wig_objcts[indx]['TEXT'].className    = 'wig_swtch_img_off';
            //No HTML Mode: wig_objcts[indx]['HTML'].onclick      = Qwig_swtch;
            wig_objcts[indx]['TEXT'].onclick      = Qwig_swtch;
            Qwig_remove(wig_objcts[indx]['WYSIWYG'],'onclick',Qwig_swtch);
            break;
        case 'HTML':
            if (document.all) {
                dcmnt.body.innerText = txtar.value;
            } else {
                var source = dcmnt.createTextNode(txtar.value);
                dcmnt.body.innerHTML = "";
                dcmnt.body.appendChild(source);
            }
            Qwig_hide();
            wig_objcts[indx]['tlbx'].style.visibility = 'hidden';
            wig_objcts[indx]['edtr'].style.zIndex = wig_objcts[indx]['txtar'].style.zIndex+1;
            wig_objcts[indx]['ifrm'].contentWindow.focus();

            wig_objcts[indx]['WYSIWYG'].className = 'wig_swtch_img_off';
            wig_objcts[indx]['HTML'].className    = 'wig_swtch_img_on' ;
            wig_objcts[indx]['TEXT'].className    = 'wig_swtch_img_off';
            wig_objcts[indx]['WYSIWYG'].onclick   = Qwig_swtch;
            wig_objcts[indx]['TEXT'].onclick      = Qwig_swtch;
            Qwig_remove(wig_objcts[indx]['HTML'],'onclick',Qwig_swtch);
            break;
        case 'TEXT':
            wig_objcts[indx]['edtr'].style.zIndex = wig_objcts[indx]['txtar'].style.zIndex-100;
            wig_objcts[indx]['txtar'].focus();

            wig_objcts[indx]['WYSIWYG'].className = 'wig_swtch_img_off';
            //No HTML Mode: wig_objcts[indx]['HTML'].className    = 'wig_swtch_img_off';
            wig_objcts[indx]['TEXT'].className    = 'wig_swtch_img_on' ;
            wig_objcts[indx]['WYSIWYG'].onclick   = Qwig_swtch;
            //No HTML Mode: wig_objcts[indx]['HTML'].onclick      = Qwig_swtch;
            Qwig_remove(wig_objcts[indx]['TEXT'],'onclick',Qwig_swtch);
            break;
    }
    wig_objcts[indx]['mode'] = mode;
}

function Qwig_swtch(e) {
    if(!e) var e = window.event;
    if(e.target) trgt = e.target; else if(e.srcElement) trgt = e.srcElement;
    Qwig_change(trgt['indx'],trgt['mode']);
}
// ================================================================ mode related


// input related ===============================================================
function Q_over(indx,cmmnd,color) {
    document.getElementById('i_'+indx+'_'+cmmnd).style.backgroundColor = color;
}

function Q_out(indx,cmmnd) {
    document.getElementById('i_'+indx+'_'+cmmnd).style.backgroundColor = 'white';
}

function Q_click(indx,cmmnd,color) {
    Qwig_execute(indx,cmmnd,color);
    Qwig_hide(indx);
}

function Qwig_palette(indx,cmmnd) {
    var arry = new Array('00','33','66','99','CC','FF');
    var strng = '';
    strng += "<table cellspacing='1' style='background-color:black;'>\n";
    for(var i=0; i<arry.length; i++) {
        strng += "<tr>\n";
        for(var j=0; j<arry.length; j++) {
            for(var k=0; k<arry.length; k++) {
                strng += "<td class='Q'"
                     +" style='background-color:#"+arry[i]+arry[j]+arry[k]+";'"
                     +" onmouseover=\"Q_over ("+indx+",'"+cmmnd+"','#"+arry[i]+arry[j]+arry[k]+"');\""
                     +" onmouseout =\"Q_out  ("+indx+",'"+cmmnd+"');\""
                     +" onclick    =\"Q_click("+indx+",'"+cmmnd+"','#"+arry[i]+arry[j]+arry[k]+"');\""
                     +"></td>\n";
            }
        }
        if(i==0) strng += "<td rowspan='6' id='i_"+indx+"_"+cmmnd+"' style='background-color:white; width:30px;'></td>\n";
        strng += "</tr>\n";
    }
    strng += "</table>\n";
    return strng;
}

function Qwig_table(indx) {
    var wdth   = document.getElementById('i_'+indx+'_wdth' ).value;
    var unt    = document.getElementById('i_'+indx+'_unit' ).options[document.getElementById('i_'+indx+'_unit').selectedIndex].value;
    var row    = document.getElementById('i_'+indx+'_row'  ).value;
    var clmn   = document.getElementById('i_'+indx+'_clmn' ).value;
    var thck   = document.getElementById('i_'+indx+'_thck' ).value;
    var c_line = document.getElementById('i_'+indx+'_cline').options[document.getElementById('i_'+indx+'_cline').selectedIndex].value;
    var pddng  = document.getElementById('i_'+indx+'_pddng').value;
    var algn   = document.getElementById('i_'+indx+'_algn' ).options[document.getElementById('i_'+indx+'_algn' ).selectedIndex].value;
    var c_cell = document.getElementById('i_'+indx+'_ccell').options[document.getElementById('i_'+indx+'_ccell').selectedIndex].value;
    var strng  = "";
    strng += "<table cellspacing='"+thck+"' style='width:"+wdth+unt+"; background-color:"+c_line+";'>\n";
    for(i=1; i<=row; i++) {
        for(j=1; j<=clmn; j++) {
            if(j==1) strng += "    <tr>\n";
            strng += "        <td style='background-color:"+c_cell+"; padding:"+pddng+"; text-align:"+algn+";'>&nbsp;</td>\n";
            if(j==clmn) strng += "    </tr>\n";
        }
    }
    strng += "</table>\n";
    Qwig_insertHTML(indx,strng);
    Qwig_hide(indx);
}

function Qwig_input(indx,cmmnd) {
    var html = '';
    var tbl,tbdy,tr,td,txt,br;
    switch(cmmnd) {

// fontname --------------------------------------------------------------------
case 'fontname':
html += "<table cellspacing='1' style='background-color:black;'>";
for(var n=0; n<wig_fonts.length; n++) {
    html += "<tr><td"
         +" style='background-color:white; padding:5px; text-align:center; vertical-align:middle; cursor:pointer; font-family:"+wig_fonts[n]+"; font-size:14px;'"
         +" onmouseover=\"this.style.backgroundColor='whitesmoke';\""
         +" onmouseout=\"this.style.backgroundColor='white';\""
         +" onclick=\"Qwig_execute("+indx+",'fontname','"+wig_fonts[n]+"'); Qwig_hide("+indx+");\""
         +">"+wig_fonts[n]+"</td></tr>";
}
html += "</table>";
break;
// -------------------------------------------------------------------- fontname

// fontsize --------------------------------------------------------------------
case 'fontsize':
html += "<table cellspacing='1' style='background-color:black;'>";
for(var n=1; n<=7; n++) {
    html += "<tr><td"
         +" style='background-color:white; padding:5px; text-align:center; vertical-align:middle; cursor:pointer; font-family:serif;'"
         +" onmouseover=\"this.style.backgroundColor='whitesmoke';\""
         +" onmouseout=\"this.style.backgroundColor='white';\""
         +" onclick=\"Qwig_execute("+indx+",'fontsize',"+n+"); Qwig_hide("+indx+");\""
         +"><font size='"+n+"'>"+n+"</font></td></tr>";
}
html += "</table>";
break;
// -------------------------------------------------------------------- fontsize

// palette ---------------------------------------------------------------------
case 'forecolor':
    html = Qwig_palette(indx,'forecolor');
    break;
case 'backcolor':
    html = Qwig_palette(indx,'backcolor');
    break;
case 'hilite':
    html = Qwig_palette(indx,'hilite');
    break;
// --------------------------------------------------------------------- palette

// table -----------------------------------------------------------------------
case 'table':

html += "<center>\n";
html += "<table cellspacing='1' style='background-color:black; font-family:tahoma; font-size:11px;'>\n";
html += "    <tr>\n";
html += "        <td class='wig_tbl_td'>WIDTH</td>\n";
html += "        <td colspan='2' class='wig_tbl_td'><input id='i_"+indx+"_wdth' type='text' value='90' style='width:50px;' />\n";
html += "            <select id='i_"+indx+"_unit'>\n";
html += "                <option value='%'>%</option>\n";
html += "                <option value='px'>px</option>\n";
html += "            </select></td>\n";
html += "    </tr>\n";
html += "    <tr>\n";
html += "        <td class='wig_tbl_td'>ROW</td>\n";
html += "        <td class='wig_tbl_td'><input id='i_"+indx+"_row' type='text' value='3' style='width:50px;' /></td>\n";
html += "        <td rowspan='2' class='wig_tbl_td' style='text-align:center;'>\n";

html += "<table cellspacing='1' style='background-color:gray;'>\n";
for(var i=1; i<=5; i++) {
    for(var j=1; j<=5; j++) {
        if(j==1) html += "<tr>\n";
        html += "<td class='Q' style='background-color:white;'"
             +" onmouseover=\"this.style.backgroundColor='silver';\""
             +" onmouseout=\"this.style.backgroundColor='white';\""
             +" onclick=\"document.getElementById('i_"+indx+"_row').value="
             +i+"; document.getElementById('i_"+indx+"_clmn').value="
             +j+";\"></td>\n";
        if(j==5) html += "</tr>\n";
    }
}
html += "</table>\n";

html += "        </td>\n";
html += "    </tr>\n";
html += "    <tr>\n";
html += "        <td class='wig_tbl_td'>COLUMN</td>\n";
html += "        <td class='wig_tbl_td'><input id='i_"+indx+"_clmn' type='text' value='3' style='width:50px;' /></td>\n";
html += "    </tr>\n";
html += "    <tr>\n";
html += "        <td class='wig_tbl_td'>LINE</td>\n";
html += "        <td colspan='2' class='wig_tbl_td'>thickness: <input id='i_"+indx+"_thck' type='text' value='1' style='width:50px;' /> px,\n";
html += "            color: <select id='i_"+indx+"_cline'>\n";
html += "                <option value='black'>black</option>\n";
html += "                <option value='gray'>gray</option>\n";
html += "                <option value='silver'>silver</option>\n";
html += "            </select></td>\n";
html += "    </tr>\n";
html += "    <tr>\n";
html += "        <td class='wig_tbl_td'>CELL</td>\n";
html += "        <td colspan='2' class='wig_tbl_td'>padding: <input id='i_"+indx+"_pddng' type='text' value='3' style='width:50px;' /> px,\n";
html += "            align: <select id='i_"+indx+"_algn'>\n";
html += "                <option value='left'>left</option>\n";
html += "                <option value='center'>center</option>\n";
html += "                <option value='right'>right</option>\n";
html += "                <option value='justify'>justify</option>\n";
html += "            </select><br />\n";
html += "            background color: <select id='i_"+indx+"_ccell'>\n";
html += "                <option value='white'>white</option>\n";
html += "                <option value='whitesmoke'>whitesmoke</option>\n";
html += "                <option value='gainsboro'>gainsboro</option>\n";
html += "            </select></td>\n";
html += "    </tr>\n";
html += "</table>\n";
html += "<a href='javascript:void(0);' onclick=\"Qwig_table("+indx+");\" style='font-family:arial; font-size:12px; font-weight:bold; color:blue;'>INSERT</a>\n";
html += "</center>\n";

break;
// ----------------------------------------------------------------------- table

// insertimage -----------------------------------------------------------------
case 'insertimage':
html += "<center>\n";
html += "<table>\n";
html += "    <tr>";
html += "        <td><input id='i_"+indx+"_insrtimg' type='text' value='http://'"
     +" style='width:300px; font-family:\"courier new\"; font-size:11px; border:1px solid black;' /></td></tr>\n";
html += "</table>\n";
html += "<a href='javascript:void(0);' onclick=\"Qwig_execute("+indx+",'insertimage',"
     +"document.getElementById('i_"+indx+"_insrtimg').value"
     +"); Qwig_hide("+indx+");\" style='font-family:arial; font-size:12px; font-weight:bold; color:blue;'>INSERT</a>\n";
html += "</center>\n";
break;
// ----------------------------------------------------------------- insertimage

// createlink ------------------------------------------------------------------
case 'createlink':
html += "<center>\n";
html += "<table>\n";
html += "    <tr>";
html += "        <td><input id='i_"+indx+"_link' type='text' value='http://'"
     +" style='width:300px; font-family:\"courier new\"; font-size:11px; border:1px solid black;' /></td></tr>\n";
html += "</table>\n";
html += "<a href='javascript:void(0);' onclick=\"Qwig_execute("+indx+",'createlink',"
     +"document.getElementById('i_"+indx+"_link').value"
     +"); Qwig_hide("+indx+");\" style='font-family:arial; font-size:11px; font-weight:bold; color:blue;'>LINK</a>\n";
html += " <a href='javascript:void(0);' onclick=\"Qwig_execute("+indx+",'unlink',null); Qwig_hide("
     +indx+");\" style='font-family:arial; font-size:12px; font-weight:bold; color:blue;'>UNLINK</a>\n";
html += "</center>\n";
break;
// ------------------------------------------------------------------ createlink

// about -----------------------------------------------------------------------
case 'about':
html += "<table cellspacing='1' style='background-color:black;'>";
html += "<tr>";
html += "    <td name='#000000' style='padding:10px 30px 10px 10px; background-color:white; font-family:tahoma; font-size:11px;'>";
html += "    <b>Qwig Editor</b><br />";
html += "    <br />";
html += "    Free Software released under the GPL<br />";
html += "    Last Modified: 2006-11-20<br />";
html += "    Coding: Trustle Ree, Graphic: Keeyeon Lee<br />";
html += "    <br />";
html += "    <a href='http://kallery.net/index.php?g_clss=forum&g_prcss=thrd&g_tmplt=&g_brd=20&g_thrd=393' target='_blank' style='text-decoration:none;'>more...</a>";
html += "    </td>";
html += "</tr>";
html += "</table>";
break;
// ----------------------------------------------------------------------- about
        default:
    }
    return html;
}
// =============================================================== input related



// when onload & resize ========================================================
function Qwig_editor(indx) {
    var txtar = wig_objcts[indx]['txtar'];

    // editor
    var edtr  = document.createElement('div');
    wig_objcts[indx]['edtr'] = edtr;
    edtr.className    = 'wig_edtr';
    document.getElementsByTagName('body').item(0).appendChild(edtr);

    // toolbox
    var tlbx = document.createElement('div');
    wig_objcts[indx]['tlbx'] = tlbx;
    tlbx.className = 'wig_tlbx';
    edtr.appendChild(tlbx);
    var arry = new Array();
    for(var n=0; n<wig_cmmnds.length; n++) {
        var tool_img = document.createElement('img');
        tool_img.className = 'wig_tool_img';
        if(wig_cmmnds[n][0]=='seperator') {
            tool_img.setAttribute('src',wig_path+'/'+wig_skin+'/'+'icn_sprtr.gif');
            tool_img.style.width  = '12px';
            tool_img.style.height = '18px';
        } else {
            tool_img.setAttribute('src',wig_path+'/'+wig_skin+'/'+wig_cmmnds[n][0]+'.gif');
            tool_img.setAttribute('title',wig_cmmnds[n][1]);
            tool_img.style.width  = wig_cmmnds[n][2]+'px';
            tool_img.style.height = wig_cmmnds[n][3]+'px';
            tool_img['indx']  = indx;
            tool_img['cmmnd'] = wig_cmmnds[n][0];
            tool_img['inpt']  = wig_cmmnds[n][4];
            tool_img.onmouseover = Qwig_over ;
            tool_img.onmouseout  = Qwig_out  ;
            tool_img.onmousedown = Qwig_down ;
            tool_img.onmouseup   = Qwig_up   ;
            tool_img.onclick     = Qwig_click;
        }
        tlbx.appendChild(tool_img);
        if(wig_cmmnds[n][4]) {
            var tool_dvsn = document.createElement('div');
            tool_img['chld']  = tool_dvsn;
            tool_dvsn.style.zIndex = wig_objcts[indx]['txtar'].style.zIndex+3;
            tool_dvsn['indx'] = indx;
            tool_dvsn['prnt'] = tool_img;
            arry.push(tool_dvsn);
            tool_dvsn.className = 'wig_inpts_dvsn';
            var tbl  = document.createElement('table');
            tbl.className = 'wig_tbl';
            var tbdy = document.createElement('tbody');
            var tr   = document.createElement('tr');
            tr.className  = 'wig_tr';
            
            var td_1 = document.createElement('td');
            td_1.className = 'wig_td'; 
            td_1.innerHTML = Qwig_input(indx,wig_cmmnds[n][0]);
            tr.appendChild(td_1);
            
            var td_2 = document.createElement('td');
            td_2.className = 'wig_td';
            td_2.style.paddingLeft   = '3px';
            td_2.style.verticalAlign = 'top';
            var img = document.createElement('img');
            img.setAttribute('src',wig_path+'/'+wig_skin+'/'+'bttn_close_wndw.gif');
            img.className = 'wig_img';
            img.onclick = function() { Qwig_hide(indx); };
            td_2.appendChild(img);
            tr.appendChild(td_2);
            
            tbdy.appendChild(tr);
            tbl.appendChild(tbdy);
            tool_dvsn.appendChild(tbl);
            document.getElementsByTagName('body').item(0).appendChild(tool_dvsn);
        }
    }
    wig_inputs[indx] = arry;

    // canvas
    var cnvs = document.createElement('iframe');
    wig_objcts[indx]['ifrm'] = cnvs;
    cnvs.className    = 'wig_cnvs';
    cnvs.frameBorder  = 0;
    cnvs.setAttribute('scrolling','auto');
    // order: append -> write -> designMode/contentEditable
    edtr.appendChild(cnvs);
    Qwig_write(indx);
    Qwig_editable(indx,true);
    // FF does not function
    //cnvs.onblur = function() { Qwig_store(indx); };

    // switch
    var swtch = document.createElement('div');
    wig_objcts[indx]['swtch'] = swtch;
    swtch.style.zIndex = wig_objcts[indx]['txtar'].style.zIndex+2;
    swtch.className = 'wig_swtch';
    var tbl  = document.createElement('table');
    var tbdy = document.createElement('tbody');
    tbl.className = 'wig_swtch_tbl';
    var tr = document.createElement('tr');
    tr.className = 'wig_tr';
    for(var n=0; n<wig_swtchs.length; n++) {
        var mode = wig_swtchs[n][0];
        var td = document.createElement('td');
        td.className = 'wig_td';
        var img_swtch = document.createElement('img');
        img_swtch.className = 'wig_swtch_img';
        img_swtch.setAttribute('src',wig_path+'/'+wig_skin+'/'+wig_swtchs[n][2]);
        img_swtch.style.width  = wig_swtchs[n][3]+'px';
        img_swtch.style.height = wig_swtchs[n][4]+'px';
        img_swtch.setAttribute('title',wig_swtchs[n][1]);
        img_swtch['indx'] = indx;
        img_swtch['mode'] = mode;
        wig_objcts[indx][mode] = img_swtch;
        td.appendChild(img_swtch);
        tr.appendChild(td);
    }
    // Qwig_change(indx,'WYSIWYG');
    // MSIE needs some time for preparing iframe body
    window.setTimeout("Qwig_change("+indx+",'WYSIWYG');",10);
    tbdy.appendChild(tr);
    tbl.appendChild(tbdy);
    swtch.appendChild(tbl);
    document.getElementsByTagName('body').item(0).appendChild(swtch);
    
    var frm = wig_objcts[indx]['frm'];
    if(frm) {
        var wig_onsubmit_old = frm.onsubmit;
        frm.onsubmit = function() {
            Qwig_store(indx);
            if(wig_onsubmit_old) {
                sccss = wig_onsubmit_old();
                if(sccss===false) return false;
            }
            return true;
        };
        // This does not action in FF.
        if(document.all) {
            var wig_submit_old = frm.submit;
            frm.submit = function() {
                Qwig_store(indx);
                wig_submit_old();
            };
        }

    }

    var wig_onresize_old = txtar.onresize;
    txtar.onresize = function() {
        if(wig_onresize_old)  wig_onresize_old();
        Qwig_onresize();
    };
}

function Qwig_onadd() {
    var txtars = document.getElementsByTagName("textarea");
    var crrnt = new Array();
    if(txtars.length) {
        for(var n=0; n<txtars.length; n++) {
            if(txtars[n].getAttribute('Qwig')!='0'
            && txtars[n].offsetWidth >=wig_min_wdth
            && txtars[n].offsetHeight>=wig_min_hght) {
                crrnt.push(txtars[n]);
            }
        }
    }
    for(var i=0; i<crrnt.length; i++) {
        var lngth = wig_objcts.length;
        for(var j=0; j<lngth; j++) {
            if(crrnt[i]===wig_objcts[j]['txtar']) break;
        }
        if(j==lngth) {
            var prnt;
            if(crrnt[i].form) prnt = crrnt[i].form; else prnt = null;
            var objct = {frm:prnt, txtar:crrnt[i]}
            wig_objcts.push(objct);
            Qwig_editor(lngth);
        }
    }
    Qwig_onresize();
}

function Qwig_onload() {
    var txtars = document.getElementsByTagName("textarea");
    if(!txtars.length) return true;
    for(var n=0; n<txtars.length; n++) {
        if(txtars[n].getAttribute('Qwig')!='0'
        && txtars[n].offsetWidth >=wig_min_wdth
        && txtars[n].offsetHeight>=wig_min_hght) {
            var prnt;
            if(txtars[n].form) prnt = txtars[n].form; else prnt = null;
            var objct = {frm:prnt, txtar:txtars[n]}
            wig_objcts.push(objct);
        }
    }
    for(var n=0; n<wig_objcts.length; n++) Qwig_editor(n);
    Qwig_onresize();
}

function Qwig_onresize() {
    for(var n=0; n<wig_objcts.length; n++) {
        wig_objcts[n]['edtr' ].style.left   = Qwig_left(wig_objcts[n]['txtar'])+'px';
        wig_objcts[n]['edtr' ].style.top    = Qwig_top( wig_objcts[n]['txtar'])+'px';
        wig_objcts[n]['edtr' ].style.width  =  wig_objcts[n]['txtar'].offsetWidth  +'px';
        wig_objcts[n]['ifrm' ].style.height = (wig_objcts[n]['txtar'].offsetHeight -wig_objcts[n]['tlbx'].offsetHeight)+'px';
        wig_objcts[n]['edtr' ].style.heigth =  wig_objcts[n]['txtar'].offsetHeight +'px';
        wig_objcts[n]['edtr' ].style.visibility = 'visible';
        wig_objcts[n]['swtch'].style.left = (Qwig_left(wig_objcts[n]['txtar'])+wig_objcts[n]['txtar'].offsetWidth -wig_objcts[n]['swtch'].offsetWidth )+'px';
        wig_objcts[n]['swtch'].style.top  = (Qwig_top( wig_objcts[n]['txtar'])+wig_objcts[n]['txtar'].offsetHeight-wig_objcts[n]['swtch'].offsetHeight)+'px';
        wig_objcts[n]['swtch'].style.visibility = 'visible';
    }
    for(var i=0; i<wig_inputs.length; i++) {
        for(var j=0; j<wig_inputs[i].length; j++) {
            var inpt = wig_inputs[i][j];
            var indx = inpt['indx'];
            t_left = Qwig_left(wig_objcts[indx]['txtar']);
            t_rght = t_left+wig_objcts[indx]['txtar'].offsetWidth;
            p_left = Qwig_left(inpt['prnt']);
            i_wdth = inpt.offsetWidth;
            if((p_left+i_wdth)>t_rght) {
                if((t_rght-i_wdth)<0) i_left = t_left; else i_left = t_rght-i_wdth;
            } else i_left = p_left;
            inpt.style.left = i_left+'px';
            inpt.style.top  = (Qwig_top(inpt['prnt'])+23)+'px';
        }
    }
}

var wig_onload_old = window.onload;
window.onload = function() {
    if(wig_onload_old) wig_onload_old();
    Qwig_onload();
};

var wig_onresize_old = window.onresize;
window.onresize = function() {
    if(wig_onresize_old) wig_onresize_old();
    Qwig_onresize();
};
// ======================================================== when onload & resize
