$(document).ready(function(){
	var truncate = document.getElementById("quoteText");
	if (truncate) {
		newString = htmlSubstr("<p>"+$("#quoteText").text()+"</p>",145);
		document.getElementById("result").innerHTML = newString;
	}	
});

function htmlSubstr(htmlString,maxLength) {
    // htmlSubstr is XHTML compliant.
    // It is case sensitive and empty HTML elements like <br> should be written <element/>.
    
    if (htmlString != null && htmlString != "" && maxLength != null && maxLength != "") {        

        isText = true
        var r = ""
        var i = 0
        
        var currentChar = ""
        var lastSpacePosition = -1
        var lastChar = ""
        
        var tagsArray = new Array()
        var currentTag = ""
        var tagLevel = 0

        var noTagLength = 0

        // Calculate string length without tags
        for (j=0;j<htmlString.length;j++) {
            currentChar = htmlString.charAt(j)
            if (currentChar == "<") { isText = false }
            if (isText) { noTagLength++ }
            if (currentChar == ">") { isText = true }    
        }
        
        // Parser loop
        for (j=0;j<htmlString.length;j++) {

            currentChar = htmlString.charAt(j)
            r += currentChar 
            
            // Lesser than event
            if (currentChar == "<") { isText = false }

            // Character handler
            if (isText) {

                // Memorize last space position
                if (currentChar == " ") lastSpacePosition = j;
                i++
            } else {
                currentTag += currentChar
            }

            // Greater than event
            if (currentChar == ">")
            {
                isText = true
                
                // Opening tag handler
                if (currentTag.indexOf("<") != -1 && currentTag.indexOf("/>") == -1 && currentTag.indexOf("</") == -1) {

                    // Tag has attribute(s)
                    if (currentTag.indexOf(" ") != -1) {
                        currentTag = currentTag.substr(1,currentTag.indexOf(" ")-1)
                    } else {
                        // Tag doesn't have attribute(s)
                        currentTag = currentTag.substr(1,currentTag.length-2)
                    }
                    
                    tagsArray[tagLevel] = currentTag
                    tagLevel++
                    
                } else if (currentTag.indexOf("</") != -1) {
                    
                    // Closing tag handler
                    tagsArray[tagLevel-1] = null
                    tagLevel--
                }
                
                currentTag = ""
            }    

            if (i == maxLength) { break }
        }
                
        // Cut HTML string at last space position
        if (maxLength < noTagLength) {        
            if (lastSpacePosition != -1) {
                r = htmlString.substr(0,lastSpacePosition);
				if ( htmlString.charAt(lastSpacePosition) == " " ) {
					lastChar=htmlString.charAt(lastSpacePosition-1);
				} else {
					lastChar=htmlString.charAt(lastSpacePosition);
				}
            } else {
                r = htmlString.substr(0,j);
				if ( htmlString.charAt(j) == " " ) {
					lastChar=htmlString.charAt(j-1);
				} else {
					lastChar=htmlString.charAt(j);
				}
            }
         }



        // Close broken XHTML elements
        for (a=tagsArray.length-1;a>=0;a--) {
            if (tagsArray[a] != null) {
			if(a==0){
				if (maxLength < noTagLength) {        
					if (lastChar != ".") { r += "... <a href=\"#TB_inline?height=400&width=510&inlineId=quoteText&inlineId2=quoteName\" class=\"thickbox quoteLink\">more</a>" } else { r += ".. <a href=\"#TB_inline?height=400&width=510&inlineId=quoteText&inlineId2=quoteName\" class=\"thickbox quoteLink\">more</a>" }
				}
			}
			r += "</" + tagsArray[a] + ">"}
        }

        
        return r // Return new HTML string
    
    } else {
        return "";
    }
}
