﻿var unicode_lastentered = "";
var unicode = "A;À,Á,Â,Ã,Ä,Å,Æ,Ā,Ă,Ą,Ǽ/C;Ç,Ć,Ĉ,Ċ,Č/D;Ď,Đ/E;È,É,Ê,Ë,Ē,Ĕ,Ė,Ę/G;Ĝ,Ğ,Ġ,Ģ,Ǵ,Ȝ/H;Ĥ,Ħ,Ƕ/I;Ì,Í,Î,Ï,Ĩ,Ī,Ĭ,İ/J;Ĵ/K;Ķ/L;Ĺ,Ļ,Ľ,Ŀ,Ł/N;Ñ,Ń,Ņ,Ň,Ŋ/O;Ò,Ó,Ô,Õ,Ö,Ø,Ō,Ŏ,Ő,Œ,Ǫ/R;Ŕ,Ŗ,Ř/S;Ś,Ŝ,Ş,Š/T;Þ,Ţ,Ť,Ŧ/U;Ù,Ú,Û,Ü,Ũ,Ū,Ŭ,Ů,Ű,Ų/W;Ŵ/Y;Ý,Ŷ,Ÿ,Ȳ,Ỹ/Z;Ź,Ż,Ž/a;à,á,â,ã,ä,å,æ,ā,ă,ą,ǎ,ǽ/b;b/c;ç,ć,ĉ,ċ,č/d;ð,ď,đ/e;è,é,ê,ë,ē,ĕ,ė,ę,ě/g;ĝ,ğ,ġ,ģ,ǵ,ȝ/h;ĥ,ħ,ƕ/i;ì,í,î,ï,ĩ,ī,ĭ,ı,ǐ/j;ĵ,ǰ/k;ķ/l;ĺ,ļ,ľ,ŀ,ł/n;ñ,ń,ņ,ň,ŋ/o;ò,ó,ô,õ,ö,ø,ō,ŏ,ő,œ,ǒ,ǫ/r;ŕ,ŗ,ř/s;ß,ś,ŝ,ş,š/t;þ,ţ,ť,ŧ/u;ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,ǔ,ǖ,ǘ,ǚ,ǜ/w;ŵ/y;ý,ÿ,ŷ,ȳ,ỹ/z;ź,ż,ž";
var selected_text;
var selected_char_pos = 0;
var browser = navigator.appName;            
var with_iframe = "0";
var selected_iframe;
var is_displayed = false;
var CE_editor;
var CE_editor_HTML = "";
var CE_editor_replacestr = "#";
var CE_editor_str = "";
var unicode_search_found = false;
var IE_selectectionstart = 0;
var IE_selectectionend = 0;

function populateUnicodeWithIFrame(divbox, txt, iframe){        
    var textsearch = txt;    
    var txtsearch = document.getElementById(textsearch);            
    var unicodesearch = $("#" + textsearch).val().toString();    
    
    $("#quicksearch_box").slideUp("slow");
    
    validateInput(unicodesearch);
    
    if (is_displayed == false) {
    
        if (validateEmptyField(unicodesearch)) {        
            selected_iframe = iframe;
           
            if (browser.indexOf("Microsoft") >= 0 ){                
                var object_selected = document.selection.createRange();                
                
                if (object_selected.text != "") {
                    selected_text = object_selected.text;
                }else{
                    selected_text = unicodesearch.substr(IE_selectectionstart,1);
                    if (selected_text == "") {
                        selected_text = unicodesearch.substr(IE_selectectionstart-1,1);
                    }
                }                                                                               
                                                           
                var unicodelist = searchUnicodeList(selected_text);
                        
                object_selected.moveStart('character', -txtsearch.value.length);       
                selected_char_pos = object_selected.text.length;
                
            }else{
                selected_char_pos = document.getElementById(textsearch).selectionStart + 1;
                
                if (document.getElementById(textsearch).selectionStart == 0 && document.getElementById(textsearch).selectionEnd == 0) {
                    selected_text = txtsearch.value.substring(0, 1);
                }else if ((document.getElementById(textsearch).selectionStart == document.getElementById(textsearch).selectionEnd) && (document.getElementById(textsearch).selectionStart != 0)) {                                        
                    selected_text = txtsearch.value.substring(document.getElementById(textsearch).selectionStart, document.getElementById(textsearch).selectionStart+1);
                    
                    if (selected_text == "") {
                        selected_text = txtsearch.value.substring(document.getElementById(textsearch).selectionEnd-1, document.getElementById(textsearch).selectionEnd);
                    }
                }else{  
                    if (document.getElementById(textsearch).selectionStart <= document.getElementById(textsearch).selectionEnd) {                        
                        selected_text = txtsearch.value.substring(selected_char_pos - 1, selected_char_pos);                    
                    } else {                        
                        selected_text = unicodesearch.substr(unicodesearch.length - 1, 1);
                    }
                    
                }
                var unicodelist = searchUnicodeList(selected_text);
            }
            
            var unicodehtml = populateUnicodeList(divbox, unicodelist, textsearch);
            $("#" + divbox).html(unicodehtml);    
            
            if (browser.indexOf("Microsoft") >= 0 ){
                $("#" + iframe).css("visibility","visible");
                $("#" + iframe).show("slow");
                $("#" + divbox).show("slow");
            } else {
                $("#" + divbox).show("slow");
            }
            
            is_displayed = true;
        }
        
    } else {            
        hideUnicode(divbox);
    }
}

function validateEmptyField(value) {
    if (value == "") return false;
    else return true;
}

function validateInput(txt) {
    if (txt == "") {
        modalPopup_showAlert('Diacritics','Please enter a character');
    }
}

function setSelectionStartEnd(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate();		
		r.moveEnd('character', o.value.length);
		if (r.text == '') {
		    IE_selectectionstart = o.value.length;
		}else{
		    IE_selectectionstart = o.value.lastIndexOf(r.text);
		}
		
		var r_end = document.selection.createRange().duplicate();
		r_end.moveStart('character', -o.value.length)
		IE_selectectionend = r_end.text.length
	}
}

function populateUnicode(divbox, txt){
    var textsearch = txt;
    var txtsearch = document.getElementById(textsearch);            
    var unicodesearch = $("#" + textsearch).val().toString();    
    
    $("#quicksearch_box").slideUp("slow");
    
    validateInput(unicodesearch);            
                    
    if (is_displayed == false) {
    
        if (validateEmptyField(unicodesearch)) {
            if (browser.indexOf("Microsoft") >= 0 ){                
                var object_selected = document.selection.createRange();                
                
                if (object_selected.text != "") {
                    selected_text = object_selected.text;
                }else{
                    selected_text = unicodesearch.substr(IE_selectectionstart,1);
                    if (selected_text == "") {
                        selected_text = unicodesearch.substr(IE_selectectionstart-1,1);
                    }
                }                                                                               
                                                                
                var unicodelist = searchUnicodeList(selected_text);
                        
                object_selected.moveStart('character', -txtsearch.value.length);       
                selected_char_pos = object_selected.text.length;
                
            }else{
                selected_char_pos = document.getElementById(textsearch).selectionStart + 1;
                
                if (document.getElementById(textsearch).selectionStart == 0 && document.getElementById(textsearch).selectionEnd == 0) {
                    selected_text = txtsearch.value.substring(0, 1);
                }else if ((document.getElementById(textsearch).selectionStart == document.getElementById(textsearch).selectionEnd) && (document.getElementById(textsearch).selectionStart != 0)) {                                        
                    selected_text = txtsearch.value.substring(document.getElementById(textsearch).selectionStart, document.getElementById(textsearch).selectionStart+1);
                    
                    if (selected_text == "") {
                        selected_text = txtsearch.value.substring(document.getElementById(textsearch).selectionEnd-1, document.getElementById(textsearch).selectionEnd);
                    }
                }else{  
                    if (document.getElementById(textsearch).selectionStart <= document.getElementById(textsearch).selectionEnd) {                        
                        selected_text = txtsearch.value.substring(selected_char_pos - 1, selected_char_pos);                    
                    } else {                        
                        selected_text = unicodesearch.substr(unicodesearch.length - 1, 1);
                    }
                    
                }
                var unicodelist = searchUnicodeList(selected_text);
            }
            
            var unicodehtml = populateUnicodeList(divbox, unicodelist, textsearch);
            
            $("#" + divbox).html(unicodehtml);
            $("#" + divbox).show("slow");
            
            is_displayed = true;
        }
        
    } else {
        hideUnicode(divbox);
    }
}

function slideUpUnicode(divbox){
    $("#" + divbox).slideUp("slow");
}

function setUnicode(divbox, txtsearch, value) {
    if (browser.indexOf("Microsoft") >= 0 ){
        var object_selected = document.selection.createRange();
        
        if (object_selected.text != "") {
            var text_length = $("#" + txtsearch).val().length;	
	        var text_left = $("#" + txtsearch).val().substring(0,selected_char_pos-1);
	        var text_right = $("#" + txtsearch).val().substring(selected_char_pos,text_length);
        }else if ((IE_selectectionstart == IE_selectectionend) && (IE_selectectionend == $("#" + txtsearch).val().length)) {
            var text_length = $("#" + txtsearch).val().length;	
            var text_left = $("#" + txtsearch).val().substring(0,IE_selectectionend-1);
	        var text_right = "";	        	        
        }else{
            var text_length = $("#" + txtsearch).val().length;	
            var text_left = $("#" + txtsearch).val().substring(0,IE_selectectionstart);
	        var text_right = $("#" + txtsearch).val().substring(IE_selectectionstart+1,text_length);            
        }	    
    }else{        
        if (document.getElementById(txtsearch).selectionStart == 0 && document.getElementById(txtsearch).selectionEnd == 0) {            
            var text_length = $("#" + txtsearch).val().length;	
	        var text_left = $("#" + txtsearch).val().substring(1,1);
	        var text_right = $("#" + txtsearch).val().substring(1,text_length);
        }else if ((document.getElementById(txtsearch).selectionStart == document.getElementById(txtsearch).selectionEnd) && (document.getElementById(txtsearch).selectionStart != 0)) {           
            var text_length = $("#" + txtsearch).val().length;	
            
            if (document.getElementById(txtsearch).selectionEnd == text_length) {
                var text_left = $("#" + txtsearch).val().substring(0, document.getElementById(txtsearch).selectionStart-1);
                var text_right = "";
            }else{
                var text_left = $("#" + txtsearch).val().substring(0, document.getElementById(txtsearch).selectionStart);
	            var text_right = $("#" + txtsearch).val().substring(document.getElementById(txtsearch).selectionStart+1, text_length);	        	        	        
            }
        }else{
            var text_length = $("#" + txtsearch).val().length;	
	        var text_left = $("#" + txtsearch).val().substring(0,selected_char_pos-1);
	        var text_right = $("#" + txtsearch).val().substring(selected_char_pos,text_length);
        }
    }
	
	document.getElementById(txtsearch).value = text_left + value + text_right;
	hideUnicode(divbox);
}

function hideUnicode(divbox) { 
    if (browser.indexOf("Microsoft") >= 0 ){            
        $("#" + selected_iframe).css("visibility","visible");
        $("#" + selected_iframe).slideUp("slow");        
        $("#" + divbox).slideUp("slow");
    }else{
        $("#" + divbox).slideUp("slow");
    }    
    is_displayed = false;
}

function searchUnicodeList(search) {            
    var arrunicode = unicode.split("/");
    var arrunicode_search = ""; 
    var search_str = "";
    var ctr = 0;
    
    unicode_search_found = false;
    search_str = search.toString();        
    
    if (search_str.substring(0,1) == ""){    
        search_str = unicode_lastentered;
    } else {        
        search_str = search_str.substring(0,1);
        unicode_lastentered = search_str;
    }
        
    if (search_str != "") {
        for (ctr = 0; ctr < arrunicode.length; ctr++) {
            if (arrunicode[ctr].indexOf(search_str) > -1){
                arrunicode_search = arrunicode[ctr].substring(2,arrunicode[ctr].length).split(",");
                unicode_search_found = true;
                break;                
            }
        }
    }
    return arrunicode_search;
}

function populateUnicodeList(divbox, unicode_list, textsearch) {
    var htmlUnicodes = "";
    var ctr = 0;
    var ctrlist = 0;    
    
    for (ctr = 0; ctr < unicode_list.length; ctr++) {            
        if (ctr == 9){                                    
            htmlUnicodes += "<span class='unicode_list' onclick=javascript:setUnicode('" + divbox + "','" + textsearch + "','" + unicode_list[ctr] + "');>" + unicode_list[ctr] + "</span>&nbsp;&nbsp;<br>";                    
            ctrlist = 0;
        } else {                                                                    
            htmlUnicodes += "<span class='unicode_list' onclick=javascript:setUnicode('" + divbox + "','" + textsearch + "','" + unicode_list[ctr] + "');>" + unicode_list[ctr] + "</span>&nbsp;&nbsp;";
            
        }                    
        ctrlist += 1;
    }       
                
    if (htmlUnicodes == "") {
        htmlUnicodes = "<span class='unicode_header' onclick=javascript:hideUnicode('" + divbox + "');>No unicode found.<div style='position:absolute; top:1px; right:2px;'><a onclick=hideUnicode('" + divbox + "')>X</a></div></span>";
    } else {                
        htmlUnicodes = "<span class='unicode_header'>Click to select a character.<div style='position:absolute; top:1px; right:2px;'><a onclick=hideUnicode('" + divbox + "')>X</a></div></span><br>" + htmlUnicodes;
    }    
    return htmlUnicodes;
}

/* start: unicode for CuteEditor */
function populateUnicodeToCE(divbox, btn){
    CE_editor = CuteEditor_GetEditor(btn);
    var selection_text = "";
    var selection_all_text = "";
    
    if (browser.indexOf("Microsoft") >= 0 ){        
        var editor_doc = CE_editor.GetDocument();        
        var selected = editor_doc.selection.createRange();
        selection_text = selected.htmlText.substring(0,1);        
        selection_all_text = selected.htmlText;        
        CE_editor_str = selection_all_text.replace(selection_text,CE_editor_replacestr);
    }else{               
        selection_all_text = CE_editor.GetSelection().toString();        
        selection_text = selection_all_text.substring(0,1);        
        CE_editor_str = selection_all_text.replace(selection_text,CE_editor_replacestr);        
    } 
    
    if (selection_text == "") {
        modalPopup_showAlert('Diacritics','Please select and highlight a character from the CuteEditor.');
    }else{
        var unicodelist = searchUnicodeList(selection_text);    
        var unicodehtml = populateUnicodeListToCE(divbox, unicodelist);
        
        $('#'+divbox).html(unicodehtml);
        $('#'+divbox).slideDown("slow");
        
        if (browser.indexOf("Microsoft") >= 0 ){
            if (unicode_search_found) {
                // 12/03/2009 BMA R01.P07 - Get the editor to original text
                var origHTML = CE_editor.getHTML();
                CE_editor.PasteHTML(CE_editor_str);
                CE_editor_HTML = CE_editor.getHTML();
                // 12/03/2009 BMA R01.P07 - Set back the editor to original text
                CE_editor.setHTML(origHTML);
            }
        }
    }
}

function populateUnicodeListToCE(divbox, unicode_list) {
    var htmlUnicodes = "";
    var ctr = 0;
    var ctrlist = 0;    
    
    for (ctr = 0; ctr < unicode_list.length; ctr++) {            
        if (ctr == 9){                                    
            htmlUnicodes += "<span class='unicode_list' onclick=javascript:setUnicodeToCE('" + divbox + "','" + unicode_list[ctr] + "');>" + unicode_list[ctr] + "</span>&nbsp;&nbsp;<br>";                    
            ctrlist = 0;
        } else {                                                                    
            htmlUnicodes += "<span class='unicode_list' onclick=javascript:setUnicodeToCE('" + divbox + "','" + unicode_list[ctr] + "');>" + unicode_list[ctr] + "</span>&nbsp;&nbsp;";
            
        }                    
        ctrlist += 1;
    }       
                
    if (htmlUnicodes == "") {
        htmlUnicodes = "<span class='unicode_header' onclick=javascript:hideUnicode('" + divbox + "');>No unicode found.<div style='position:absolute; top:1px; right:2px;'><a onclick=hideUnicode('" + divbox + "')>X</a></div></span>";
    } else {                
        htmlUnicodes = "<span class='unicode_header'>Click to select a character.<div style='position:absolute; top:1px; right:2px;'><a onclick=hideUnicode('" + divbox + "')>X</a></div></span><br>" + htmlUnicodes;
    }    
    return htmlUnicodes;
}

function setUnicodeToCE(divbox, value) {	    
    if (browser.indexOf("Microsoft") >= 0 ){       
        if (unicode_search_found){
            var replaced_str = CE_editor_str.replace(CE_editor_replacestr, value)
            CE_editor.setHTML(CE_editor_HTML.replace(CE_editor_str,replaced_str));
        }   
    }else{        
        CE_editor.PasteHTML(value);
    }    
    hideUnicode(divbox);
}
/* end: unicode for CuteEditor */