﻿String.prototype.trim = function() {
    return (this.replace( /^[\s\xA0]+/ , "").replace( /[\s\xA0]+$/ , ""));
};
String.prototype.startsWith = function(str) {
    return (this.match("^" + str) == str);
};
String.prototype.endsWith = function(str) {
    return (this.match(str + "$") == str);
};

function fixMsWord(innerText) {
    innerText = trim(innerText);
    innerText = innerText.replace( /\t\r\n/gi , ' ');
    innerText = innerText.replace( /\r\n/gi , ' ');
    innerText = innerText.replace( /\r/gi , ' ');
    innerText = innerText.replace( /\n/gi , ' ');

    innerText = innerText.replace( /<(\/)*(\\?xml:|meta|link|span|font|del|ins|st1:|[ovwxp]:)((.|\s)*?)>/gi , ''); // Unwanted tags
    innerText = innerText.replace( /(class|style|type|start|cellpadding|cellspacing|border|height)=("(.*?)"|(\w*))/gi , ''); // Unwanted sttributes
    innerText = innerText.replace( /<style(.*?)style>/gi , ''); // Style tags
    innerText = innerText.replace( /<script(.*?)script>/gi , ''); // Script tags
    innerText = innerText.replace( /<!--(.*?)-->/gi , ''); // HTML comments
    innerText = innerText.replace( /<(?:(\w+)(?: [^>]*)?`> *<\/$1>)|(?:<\w+(?: [^>]*)?\/>)/g , '');
    innerText = innerText.replace( /<!(?:--[\s\S]*?--\s*)?>\s*/gi , '');
    innerText = innerText.replace( /<(\w*)\s*[^\/>]*>\s*<\/\1>/g , ''); //Remove empty html tag

    var tempDiv = document.createElement("div");
    tempDiv.innerHTML = trim(innerText);
    for (i = 0; i < tempDiv.getElementsByTagName('p').length; i++) {
        var p = tempDiv.getElementsByTagName('p')[i];
        if (trim(getInnerTextByObj(p)).length == 0) {
            p.innerHTML = '&nbsp;';
        }
    }

    return tempDiv.innerHTML;
}

function getFolderName(strInput) {
//    var strShortName='';
    strInput = trim(strInput.toLowerCase());
    strInput = toPlainText(strInput);
    strInput = toUnsignedText(strInput);
    strInput = toTitleCase(strInput);
    while (strInput.indexOf(' ') > -1) {
        strInput = strInput.replace(' ', '-');
    }

    while (strInput.indexOf('--') > -1) {
        strInput = strInput.replace('--', '-');
    }
    return strInput;
}

function insertHtmlLineBreak(src, maxLength) {
    var output = '';
    if (src.length > maxLength) {
        var lastIndex = src.length - (src.length % maxLength);
        var startIndex = 0;
        var middleIndex = maxLength;
        while (middleIndex <= lastIndex) {
            output += src.substring(startIndex, middleIndex) + '<br>';
            startIndex = middleIndex;
            middleIndex += maxLength;
        }
        output += src.substring(lastIndex);
    } else {
        output = src;
    }

    return output;
}

function getShortString(src, maxLength) {
    var output = '';
    if (src.length > maxLength) {
        output = src.substring(0, maxLength);
        var spaceIndex = output.lastIndexOf(' ');
        if (spaceIndex > -1) {
            output = output.substring(0, spaceIndex);
        }
    } else {
        output = src;
    }

    return output;
}

function getElementsByNameFixed(tag, name) {
    var objArray = new Array(0);
    if (document.all) {
        for (i = 0; i < document.getElementsByTagName(tag).length; i++) {
            var obj = document.getElementsByTagName(tag)[i];
            if (obj.getAttribute('name') == name) {
                objArray[objArray.length] = obj;
            }
        }
        return objArray;
    } else {
        return document.getElementsByName(name);
    }
}

function getOuterHTMLByObject(obj) {
//    var element = document.createElement("div");
//    element.appendChild(obj.cloneNode(true));
//    var innerHtml=element.innerHTML;
//    element=null;
    //    return innerHtml;
    var parent = obj.parentNode;

    var el = document.createElement(parent.tagName);

    el.appendChild(obj);

    var shtml = el.innerHTML;

    parent.appendChild(obj);

    return shtml;
}

function getInnerText(controlID) {
    if (controlID.toLowerCase().indexOf('document.getelementbyid') > -1) {
        getInnerTextByObj(controlID);
    } else {
        return getInnerTextByObj(document.getElementById(controlID));
    }
}

function getInnerTextByObj(obj) {
    var innerText = '';
    if (obj != null) {
        if (document.all) {
            innerText = obj.innerText.trim();
        } else {
            innerText = obj.textContent.trim();
        }
    }

    return innerText;
}

function setInnerText(controlID, strValue) {
    setInnerTextByObj(document.getElementById(controlID), strValue);
}

function setInnerTextByObj(obj, strValue) {
    if (document.all) {
        obj.innerText = strValue.trim();
    } else {
        obj.textContent = strValue.trim();
    }
}

function toTitleCase(strInput) {
    var strArray = strInput.split(' ');
    var strOutput = '';
    for (i = 0; i < strArray.length; i++) {
        var word = strArray[i];
        var c = word.charAt(0);
//		strOutput+=c.toUpperCase() + word.substring(1, word.length);

        if (!isSpecialChars(c)) {
            strOutput += c.toUpperCase() + word.substring(1, word.length);
        } else {
            if (word.length > 1) {
                strOutput += c + word.charAt(1).toUpperCase() + word.substring(2, word.length);
            } else {
                strOutput += c + word.substring(1, word.length);
            }
        }

        if (i < strArray.length - 1) {
            strOutput += ' ';
        }

    }

    return trim(strOutput);
}

function toUnsignedText(strInput) {
    var strTemp = '';

    for (i = 0; i < strInput.length; i++) {
        var c = strInput.charAt(i);

        switch (c) {
        case 'é':
        case 'è':
        case 'ẹ':
        case 'ẽ':
        case 'ẻ':
            strTemp += 'e';
            break;				
        case 'ê':
        case 'ế':
        case 'ề':
        case 'ệ':
        case 'ễ':
        case 'ể':
            strTemp += 'e';
            break;
        //y related chars
        case 'ý':
        case 'ỳ':
        case 'ỵ':
        case 'ỹ':
        case 'ỷ':
            strTemp += 'y';
            break;
        //u related chars
        case 'ú':
        case 'ù':
        case 'ụ':
        case 'ũ':
        case 'ủ':
            strTemp += 'u';
            break;
        case 'ư':
        case 'ứ':
        case 'ừ':
        case 'ự':
        case 'ữ':
        case 'ử':
            strTemp += 'u';
            break;			
        //y related chars
        case 'í':
        case 'ì':
        case 'ị':
        case 'ĩ':
        case 'ỉ':
            strTemp += 'i';
            break;
        //o related chars
        case 'ó':
        case 'ò':
        case 'ọ':
        case 'õ':
        case 'ỏ':
            strTemp += 'o';
            break;
        case 'ơ':
        case 'ớ':
        case 'ờ':
        case 'ợ':
        case 'ỡ':
        case 'ở':
            strTemp += 'o';
            break;
        case 'ô':
        case 'ố':
        case 'ồ':
        case 'ộ':
        case 'ỗ':
        case 'ổ':
            strTemp += 'o';
            break;
        //a related chars
        case 'á':
        case 'à':
        case 'ạ':
        case 'ã':
        case 'ả':
            strTemp += 'a';
            break;
        case 'ă':
        case 'ắ':
        case 'ằ':
        case 'ặ':
        case 'ẵ':
        case 'ẳ':
            strTemp += 'a';
            break;
        case 'â':
        case 'ấ':
        case 'ầ':
        case 'ậ':
        case 'ẫ':
        case 'ẩ':
            strTemp += 'a';
            break;
        //đ related chars
        case 'đ':
            strTemp += 'd';
            break;
        default:
			    //strTemp+=c;
            if (allowChars(c)) {
                strTemp += c;
            }
            break;
        }

    }

    return strTemp;
}

function replaceString(strInput, searchString, replaceString) {
    if (strInput != '') {
        //        strInput=strInput.replace(searchString, replaceString, "gi");
        switch (searchString) {
        case '+':
            searchString = '\\' + searchString;
            break;
        }
        var re = new RegExp(searchString, 'gi');
        strInput = strInput.replace(re, replaceString);
    }
    return strInput;
}

function subString(strSource, intLen) {
    var strReturn = strSource;
    if (strSource.length > intLen) {
        strReturn = strSource.substring(0, intLen);
        var endIndex = strReturn.lastIndexOf(" ");
        strReturn = strReturn.substring(0, endIndex);
    }

    return strReturn;
}

function toPlainText(strInput) {
    var reg = /[-_=\+\\\|<>,.\?:;'‘’`“”~!\@#\$\%\^&*()\"\[\]\{\}\/\t\r\n–]+/g ;
    strInput = strInput.replace(reg, ' ');
    while (strInput.indexOf('  ') > -1) {
        strInput = strInput.replace('  ', ' ');
    }
    return trim(strInput);
}

function toText(strInput) {
    var reg = /[‘’`“”~\^\t\r\n–]+/g ;
    strInput = strInput.replace(reg, ' ');
    while (strInput.indexOf('  ') > -1) {
        strInput = strInput.replace('  ', ' ');
    }

    return trim(strInput);
}

function trim(sString) {
    while (sString.substring(0, 1) == ' ') {
        sString = sString.substring(1, sString.length);
    }
    while (sString.substring(sString.length - 1, sString.length) == ' ') {
        sString = sString.substring(0, sString.length - 1);
    }

    while (sString.toUpperCase().substring(sString.length - 4, sString.length) == '<BR>') {
        sString = sString.substring(0, sString.length - 4);
    }
    while (sString.substring(sString.length - 1, sString.length) == ' ') {
        sString = sString.substring(0, sString.length - 1);
    }
    while (sString.indexOf('  ') > -1) {
        sString = sString.replace('  ', ' ');
    }

    return sString;
}

function isSpecialChars(c) {
    var reg = /[^-_=\+\\\|<>,.\?:;'‘’`“”~!\@\#\$\%\^\&\*\(\)\""\[\]\{\}\t\r\n\x20\s ]+/ ;
    var foundChars = c.match(reg);

    if (foundChars != null) {
        return false;
    } else {
        return true;
    }
}


function allowChars(c) {
    var regSpecialChars = /[^a-zA-Z0-9 ]/g ;
    var foundChars = c.match(regSpecialChars);
    if (foundChars != null) {
        return false;
    } else {
        return true;
    }
}

/*
function charIsValid(strInput){
	var reg=/[^a-zA-Z0-9_-]/g;
	var foundChars=strInput.match(reg);
	if(foundChars!=null){
		return false;
	}
	else{
		return true;
	}
}



function parseKeyword(strInput){
    var words=strInput.split(' ');
    var keyword='';
    
    if(words.length>0){
        var wordIndex=0;
        var word=checkKeyword(words[wordIndex]);

        while(wordIndex<words.length){
            if(keyword.indexOf(word)==-1){
                keyword+=word + ', ';
            }
            word=checkKeyword(words[++wordIndex]);
        }
    }
    while(keyword.indexOf(' ,')>-1){
        keyword=keyword.replace(' ,', ',');
    }
    while(keyword.indexOf(', ,')>-1){
        keyword=keyword.replace(', ,', ', ');
    }
        
    while(keyword.lastIndexOf(', ')==keyword.length-2){
        keyword=keyword.substring(0, keyword.length-2);
    }
    
    return keyword;
}

function checkKeyword(word){
    var specialChar='~!@#$%^&*()+=\|,./<>?;\':\"-“”';
    if(word!=null && word!=''){
	    for(i=0;i<specialChar.length;i++){
	        var c=specialChar.charAt(i);
	        while(word.indexOf(c)>-1){
	            word=word.replace(c, '');
            }
        }
    }
    
    return word + ' ';
}
*/

function postBackEncode(strInput) {
    strInput = replaceString(strInput, '&', '###AND###');
    strInput = replaceString(strInput, '+', '###PLUS###');
//    strInput=replaceString(strInput, "'", "&apos;");    
    return strInput;
}

function postBackDecode(strInput) {
    strInput = replaceString(strInput, '###AND###', '&');
    strInput = replaceString(strInput, '###PLUS###', '+');
//    strInput=replaceString(strInput, "&apos;", "'");    
    return strInput;
}
