/*
 * Plugins:
 *  floatinglabel
 *  alternateStripes
 *  toolTip
 *  gMapLocator
 *  consoleHandler
 */

jQuery.fn.floatingLabel = function () {
    var $form = this,
        $field = $form.find('input'),
        $label = $form.find('label');
    
    $form.css('position','relative');
    $label.addClass('float_styles');
    
    if ($field.val()) {
        $label.hide();
    }
    $field.focus(function() {
        $label.hide();
    }).blur(function() {
        if (this.value == '') {
            $label.show();
        }
    });
    $label.click(function() {
        $field.trigger('focus');
    });
    return this;
};

jQuery.fn.setBreadcrumbs = function () {
    this.hide();
    if ($('#breadcrumb_nav').length > 0) {
        $('#breadcrumb_nav').html(this.html());
    }
};

jQuery.fn.setErrorStyle = function () {
    if (this.html() !== '') this.addClass('error');
};

jQuery.fn.setCaptcha = function () {
    this.addClass('required');
};

jQuery.fn.alternateStripes = function () {
    var $elems = this.add(this.siblings());
    
    $elems.filter(':odd').removeClass('even').addClass('odd');
    $elems.filter(':even').removeClass('odd').addClass('even');
    return this;
};

jQuery.fn.shadow = function (options) {
    var defaults = {
        slices : 5,
        opacity : 0.1,
        zIndex : 1,
        sliceOffset : function (i) {
            return {x : i,y : i};
        }
    };
    var options = jQuery.extend(defaults,options);
    return this.each(function (i) {
        var $e = jQuery(this);
        for (var i=0;i < options.slices;i++) {
            var offset = options.sliceOffset(i);
            $e.clone().css({
                position : 'absolute',
                left : $e.offset().left + offset.x,
                top : $e.offset().top + offset.y,
                margin: 0,
                zIndex : options.zIndex,
                opacity : options.opacity
            }).insertAfter($e);
        }
    });
};

/*
    FIXME fix alternating regex match bug
    TODO test large text and image content on link hover
*/
jQuery.fn.toolTip = function () {
    var elem = this,
        $tooltip = jQuery('<div id="tooltip" class="notice"></div>').appendTo('body'),
        $tt_title = jQuery('<h3>Tip</h3>').appendTo($tooltip),
        $tt_copy = jQuery('<p class="tt_copy"></p>').appendTo($tooltip),
        $tt_url = jQuery('<p class="tt_url small quiet"></p>').appendTo($tooltip),
        positionTooltip = function  (event) {
            var tPosX = event.pageX,
                tPosY = event.pageY + 20;
            $tooltip.css({top: tPosY, left: tPosX});
        },
        showTooltip = function (event) {
            var txt = setTooltipText(event.target) || 'TITLE or ALT attribute not set for this element.';
            
            $tooltip.fadeIn('slow');
            positionTooltip(event);
        },
        hideTooltip = function() {
            $tooltip.fadeOut('fast');
        },
        setTooltipText = function (target) {
            var regex = /<.*>/gim,
                targetHTML = jQuery(target).html(),
                hasChildMarkup = regex.test(targetHTML);
            
            if (target.nodeName.toLowerCase() === 'img') {
                $tt_copy.text(target.alt);
                $tt_url.text('');
            } else {
                if (target.title) {
                    // target.setAttribute('rel',target.title);
                    jQuery(target).data('ttt_data',target.title);
                    target.removeAttribute('title');
                }
                
                if (hasChildMarkup) {
                    $tt_copy.html(targetHTML.substring(
                        targetHTML.indexOf('<'),targetHTML.lastIndexOf('>')+1)).children().show();
                } else {
                    // $tt_copy.text(target.rel);
                    $tt_copy.text(jQuery(target).data('ttt_data'));
                }
                $tt_url.text(target.href);
            }
        };
        elem.children().hide();
    elem.hover(showTooltip,hideTooltip).mousemove(positionTooltip);
    return this;
};

jQuery.fn.tabbedContent = function () {
    var $containers = this,
        $nav = jQuery('<ul id="tab-nav"></ul>'),
        $loc = location.hash.substring(location.hash.indexOf('#'),location.hash.length);
    
    $containers.hide().each(function (i) {
        var eID = jQuery(':first',this).text().toLowerCase().replace(/ /,'-');
        
        jQuery(this).attr('id',eID);
        $nav.append(['<li>','<a href="#',eID,'">',jQuery(':first',this).text(),'</a>','</li>'].join(''));
    });
    
    jQuery(':first','.main-content').after($nav);
    
    if (location.hash) {
        jQuery($loc).show();
        jQuery($nav).find('a').removeClass('selected');
        jQuery('li',$nav).find('a').each(function (i) {
            var hash = jQuery(this).attr('href');
            hash = hash.substring(hash.indexOf('#'),hash.length);
            if (hash === $loc) jQuery(this).addClass('selected');
        });
    } else {
        jQuery('li:first a',$nav).addClass('selected');
        jQuery($containers[0]).show();
    }
    $nav.click(function (e) {
        var $target = jQuery(e.target);
        
        if (!$target.hasClass('selected')) {
            jQuery($nav).find('a').removeClass('selected');
            $containers.hide();
            $containers.each(function (i) {
                if (jQuery(this).attr('id') === $target.attr('href').substring($target.attr('href').indexOf('#')+1,$target.attr('href').length))
                    jQuery(this).slideDown('slow');
            });
            $target.addClass('selected');
            location = $target.attr('href');
        }
        return false;
    });
};


jQuery(function () {
    jQuery('p.service_list').each(function (i) {
        var str = jQuery(this).text();
        jQuery(this).text(str.replace(/,/gi,', '));
    });
});