YAHOO.util.Event.onDOMReady(function(){
    var clearOnFocus = function (e,o) {
        o.fakeField.parentNode.removeChild(o.fakeField);
        YAHOO.util.Dom.setStyle(o.realField, 'display', o.originalDisplay);
        o.realField.focus();
    }

    var inputs = YAHOO.util.Dom.getElementsByClassName('clear-on-focus', 'input');
    var o, originalDisplay, type, fakefield;
    for (var i=0;i<inputs.length;i++) {
        o = inputs[i];
        type = o.getAttribute('type').toLowerCase();
        if (type == 'text' || type == 'password') {
            YAHOO.util.Dom.removeClass(o, 'clear-on-focus');
            fakefield = document.createElement('input');
            fakefield.setAttribute('class', o.className);
            fakefield.setAttribute('className', o.className);
            fakefield.setAttribute('style', o.getAttribute('style'));
            fakefield.setAttribute('type', 'text');
            fakefield.value = o.title;
            o.title = '';
            originalDisplay = YAHOO.util.Dom.getStyle(o, 'display');
            YAHOO.util.Dom.setStyle(o, 'display', 'none');
            o.parentNode.insertBefore(fakefield, o);
            YAHOO.util.Event.addListener(fakefield, 'focus', clearOnFocus, {realField:o,fakeField:fakefield,originalDisplay:originalDisplay});
        }
    }

    var showText = function(evt) {
        YAHOO.util.Event.stopEvent(evt);
        var block = YAHOO.util.Dom.getAncestorBy(YAHOO.util.Event.getTarget(evt), function(node){
            return YAHOO.util.Dom.hasClass(node.nextSibling, 'hidden-text');
        });
        if (block) {
            YAHOO.util.Dom.setStyle(block, 'display', 'none');
            YAHOO.util.Dom.setStyle(block.nextSibling, 'display', 'block');
        }
    }

    var hidden_blocks = YAHOO.util.Dom.getElementsByClassName('hidden-text', 'div');
    var elems, block, word_count, words, elem, elemCopy, el, hidden;
    var max_length = 75;
    for (var i=0;i<hidden_blocks.length;i++){
        elems = [];
        word_count = 0;
        block = hidden_blocks[i].cloneNode(false);
        YAHOO.util.Dom.removeClass(block, 'hidden-text');
        elemCopy = block;
        elem = hidden_blocks[i].firstChild;
        if (elem) {
            do {
                if (elem.nodeType == 3) {
                    words = elem.nodeValue.replace(/ +/, ' ').split(/ /);
                    if (words.length + word_count > max_length) {
                        words.splice(max_length - word_count, words.length - (max_length - word_count));
                    }
                    word_count += words.length;
                    elemCopy.appendChild(document.createTextNode(words.join(' ')));
                    elem = elem.nextSibling;
                } else if (elem.nodeType !== 1 || elem.tagName.toLowerCase() !== 'br' ) {
                    elems.push(elem);
                    el = elem.cloneNode(false);
                    elemCopy.appendChild(el);
                    elemCopy = el;
                    elem = elem.firstChild;
                } else {
                    elem = elem.nextSibling;
                }
                if (! elem) {
                    elem = elems.pop().nextSibling;
                    if (elemCopy.parentNode) {
                        elemCopy = elemCopy.parentNode;
                    }
                }
            } while (elem && word_count < max_length);
        }
        if (elem) {
            elem = document.createElement('a');
            elem.setAttribute('href', '#');
            YAHOO.util.Dom.addClass('more-link');
            elem.appendChild(document.createTextNode('See More'));
            if (block.lastChild.nodeType === 1 && block.lastChild.tagName.toLowerCase() === 'p') {
                block.lastChild.innerHTML += '&hellip; ';
                block.lastChild.appendChild(elem);
            } else {
                block.innerHTML += '&hellip; ';
                block.appendChild(elem);
            }
            hidden_blocks[i].parentNode.insertBefore(block, hidden_blocks[i]);
            YAHOO.util.Dom.setStyle(hidden_blocks[i], 'display', 'none');
            YAHOO.util.Event.addListener(elem, 'click', showText);
        }
    }
});

