/**
 * ---------------------- Subversion Information ------------------------------
 * ****************************************************************************
 * $Date: 2009-07-30 10:59:10 -0700 (Thu, 30 Jul 2009) $
 * $Rev: 692 $
 * $Author: steven $
 *
 * SVN URL of this file
 * $HeadURL: http://hal/svn/cms/trunk/backend/inc/js/docready.jquery.js $
 * ****************************************************************************
 *
 * @copyright Real Estate Webmasters 2004 - 2009
 */

$(document).ready(function() {

	$('#nav-secondary li ul:visible').hide();
	$('#post-menu>ul>li').hover(
		function(){ $('.submenu', this).fadeIn(); },
		function(){ $('.submenu', this).fadeOut('fast'); }
	);
	$('#nav-secondary li').hover(
		function(){ $('ul', this).fadeIn('fast'); },
		function(){ $('ul', this).fadeOut('fast'); }
	);
	$("div.item").wrap('<div class="dialog">'+'<div class="bd">'+'<div class="c">'+'<div class="s">'+'</div>'+'</div>'+'</div>'+'</div>');
	$('div.dialog').prepend('<div class="hd">'+'<div class="c"></div>'+'</div>').append('<div class="ft">'+'<div class="c"></div>'+'</div>');
	$('#nav-primary li').hover(function() {
		$(this).addClass('over');
	}, function() {
		$(this).removeClass('over');
	});
	$('.button').hover(function(){$(this).attr("src", $(this).attr("src").split('-off').join('-on'))}, function(){$(this).attr("src", $(this).attr("src").split('-on').join('-off'))});

	$('.ico-help').toggle(
		function(){
			$(this).parents('td').children('.tip').fadeIn('slow');
			return false;
		},
		function() {
			$(this).parents('td').children('.tip').fadeOut('slow');
		}
	);

	$('.app-panel').wrap('<div class="shadow"></div>');

	$('.app-panel tr:has(td)').live('click', function(event){
		if (!($(event.target).is('span'))) {
			if (event.target.type !== 'checkbox') {
    		  	$(':checkbox', this).trigger('click');
			}
		}
	});

	/* Paginate Tables */
    $('.app-panel table').not('.omit-paginate').jPaginate();

    /* Sorting Features */
    $('.app-panel table').not('.omit-sortable').jSortable();

    /* Drop Down Select Options */
    $('.rew-button.select').jSelect();

	/**
	 * REW Buttons
	 */
	$('.rew-button').each(function() {
		$button = $(this);
		if ($(this).hasClass('submit')) {
		    $form = $(this).closest('form');
            if ($form.find('input[name="rewform"]').length <= 0) {
                $('<input type="submit" name="rewform" class="rewform-submit" />').appendTo($form);
		    }
		}
		$button.click(function(){
			$form = $(this).closest('form');
			if ($(this).hasClass('submit')) {
				$form.trigger('submit');
			} else if ($(this).hasClass('reset')) {
				$form.reset();
			}
		}).hover(
			function() {
				$(this).addClass('rew-state-hover');
			}, function() {
				$(this).removeClass('rew-state-hover');
		}).mousedown(function() {
			$(this).addClass('rew-state-active');
		}).mouseup(function() {
			$(this).removeClass('rew-state-active');
		}).mouseout(function() {
			$(this).removeClass('rew-state-active');
		});
	});

	/**
	 * onClick Target Handler
	 */
	$(document).click(function(event){
		eto = $(event.target);
		// we click a menu?
		etomenu = eto.parents('.menu').html();
		// we click a menu button?
		etobutton = eto.parents('.select').html();
		if(etomenu != null) {
			//alert('you click menu, dear sir');
		} else if(etobutton != null) {
			//alert('you click button, dear sir');
		} else {
			$('.rew-menu').hide();
		}
	});

});

/**
 * $.fn.reset
 */
$.fn.reset = function(options) {
	return this.each(function() {
		var $this = $(this);
		$this[0].reset();
	});
};

/**
 * jQuery.fn.jPaginate
 */
jQuery.fn.jPaginate = function(options) {

    var settings = jQuery.extend({
        currentPage: 0,
        numPerPage:  10,
        numPerView:  10
    }, options);

    jQuery(this).each(function () {

        var numPerPage = parseFloat($(this).attr('class').replace(/[^\d\.]+/gi, ''));
        var numPerPage = isNaN(numPerPage) ? settings.numPerPage : numPerPage;

    	var currentPage = settings.currentPage;
    	var numPerView  = settings.numPerView;

    	var $table = $(this);
    	var $appwindow = $table.parents('.app-panel-window');

        $table.bind('repaginate', function() {
            var start = currentPage * numPerPage;
            var end = (currentPage + 1) * numPerPage;
            $table.find('tbody tr').slice(start, end).show().end().slice(0, start).hide().end().slice(end).hide().end();
            //$table.find('tbody tr').show().slice(0, start).hide().end().slice(end).hide().end();
        });

    	var numRows = $table.find('tbody tr').length;
    	var numPages = Math.ceil(numRows / numPerPage);

        if (numPages > 1) {

    		var $pager = $('<div class="app-panel-foot-pagination"></div>');

    		for (var page = 0; page < numPages; page++) {
    			$plink = $('<a href="javascript:void(0)">' + (page + 1) + '</a>');
    			$plink.bind('click', {'newPage': page}, function(event) {
    				currentPage = event.data['newPage'];
    				$(this).addClass('current').siblings('a').removeClass('current');
    				$table.trigger('repaginate');
    				$pager.trigger('repaginatenav');
    			}).appendTo($pager);
    		}

            $pager.bind('repaginatenav', function() {
     			if (numPages > numPerView){
     			    $('a', $pager).hide();
    				if (currentPage + 1 < numPerPage) {
    					// left side
    					start = 0;
    					end = numPerPage;
    				} else if (currentPage > (numPages-numPerPage)) {
    					// right side
    					start = numPages-numPerPage;
    					end = numPages;
    				} else {
    					// middle
    					start = currentPage-5;
    					end = currentPage+5;

    				}
    				$('a', $pager).slice(start,end).show().end();
    			}
            });


    		$(':first-child', $pager).addClass('current');

    		$appwindow.next('.app-panel-foot').append($pager);
    		$table.trigger('repaginate');
			$pager.trigger('repaginatenav');
    		var theight = $appwindow.height();
    		$appwindow.css('min-height', theight);

    	} else {

    	    $footer = $appwindow.siblings('.app-panel-foot');
    	    if (jQuery.trim($footer.find('.app-panel-foot-menu').html()) == '') {
    	       $footer.hide();
    	    }

    	}

	});

}

/**
 * jQuery.fn.jSortable
 */
jQuery.fn.jSortable = function() {

    jQuery(this).each(function () {

        var $table = $(this);
        $table.find('th').each(function(column) {
            var findSortKey;
            if ($(this).is('.sort-alpha')) {
                findSortKey = function($cell) {
                    return $cell.find('.sort-key').text().toUpperCase() + ' ' + $cell.text().toUpperCase();
                };
            }
            else if ($(this).is('.sort-numeric')) {
                findSortKey = function($cell) {
                    var key = parseFloat($cell.find('.sort-key').text().replace(/[^\d\.]+/gi, ''));
                    if (isNaN(key)) {
                        var key = parseFloat($cell.text().replace(/[^\d\.]+/gi, ''));
                    }
                    return isNaN(key) ? 0 : key;
                };
            }
            else if ($(this).is('.sort-date')) {
                findSortKey = function($cell) {
                    return Date.parse($cell.attr('title'));
                };
            }
            if (findSortKey) {
                $(this).addClass('clickable').hover(function() {
                    $(this).addClass('ui-state-hover');
                }, function() {
                    $(this).removeClass('ui-state-hover');
                }).click(function() {
                    var newDirection = 1;
                    if ($(this).is('.sorted-asc')) {
                        newDirection = -1;
                    }
                    rows = $table.find('tbody > tr').get();
                    $.each(rows, function(index, row) {
                        row.sortKey = findSortKey($(row).children('td').eq(column));
                    });
                    rows.sort(function(a, b) {
                        if (a.sortKey < b.sortKey) return -newDirection;
                        if (a.sortKey > b.sortKey) return newDirection;
                        return 0;
                    });
                    $.each(rows, function(index, row) {
                        $table.children('tbody').append(row);
                        row.sortKey = null;
                    });
                    $table.find('th').removeClass('sorted-asc').removeClass('sorted-desc');
                    var $sortHead = $table.find('th').filter(':nth-child(' + (column + 1) + ')');
                    if (newDirection == 1) {
                        $sortHead.removeClass('sorted-desc').addClass('ui-state-active').addClass('sorted-asc');
                        $sortHead.siblings().removeClass('sorted-desc').removeClass('sorted-asc').removeClass('ui-state-active');
                        $table.find('th').find('span').removeClass('ui-icon-arrowthick-1-s').removeClass('ui-icon-arrowthick-1-n').addClass('ui-icon-arrowthick-2-n-s');
                        $sortHead.find('span').removeClass('ui-icon-arrowthick-2-n-s').removeClass('ui-icon-arrowthick-1-n').addClass('ui-icon-arrowthick-1-s');
                    } else {
                        $sortHead.removeClass('sorted-asc').addClass('ui-state-active').addClass('sorted-desc');
                        $sortHead.siblings().removeClass('sorted-asc').removeClass('sorted-desc').removeClass('ui-state-active');
                        $table.find('th').find('span').removeClass('ui-icon-arrowthick-1-n').removeClass('ui-icon-arrowthick-1-s').addClass('ui-icon-arrowthick-2-n-s');
                        $sortHead.find('span').removeClass('ui-icon-arrowthick-2-n-s').removeClass('ui-icon-arrowthick-1-s').addClass('ui-icon-arrowthick-1-n');
                    }
                    $table.find('td').removeClass('sorted').filter(':nth-child(' + (column + 1) + ')').addClass('sorted');
                    $table.trigger('repaginate');

                });
            }
        });

	});

}

/**
 * jQuery.fn.jSelect
 */
jQuery.fn.jSelect = function(options) {

    jQuery(this).each(function () {

        var elem = $(this);
		var select = elem.children('select');
		var list   = '<div class="rew-menu"><ul></ul></div>';

		elem.append(list);

		// dynamic list
		var menu = $('.rew-menu', elem);
		var list = $('.rew-menu ul', elem);

		// hide select
		select.hide();

		// toggle menu options onclick
		elem.click(function(event){
			var eto = $(event.target);
			if (!eto.is('li') && !eto.is('strong')) {

			    // show menu, reset scroll
				menu.toggle().scrollTop(0);

			    // remove selected option from list
			    menu.find('li').hide().not('.selected').show();

				// remove default selection from list
			    selected = $('.rew-button-content:contains(' + menu.find('li:first').text() + ')', elem);
			    selected.length ? menu.find('li:first').hide() : menu.find('li:first').show();

			    // drop down
			    menu.css({top: elem.outerHeight() - 2});

			    // should we correct and drop up instead...
                var $win = $(window),
                offset = menu.offset();
                if ((menu.height() + offset.top) > ($win.height() + $win.scrollTop())) {
                    // drop up
                    menu.css({top: elem.outerHeight() - (menu.height() + elem.outerHeight() + 2)});
                }

			}
		});

		// show menu selection
		elem.prepend('<span class="rew-button-content"></span>');

		// generate dynamic list
		$('option', select).each(function (i) {
			// use the first option as default selection
			if (i == 0) {
				$('.rew-button-content', elem).html($(this).text() + ' <span class="ico-arrow"></span>');
				var item = '<li rel="' + $(this).val() + '"><strong>' + $(this).text() + '</strong></li>';
			} else {
				var item = '<li rel="' + $(this).val() + '">' + $(this).text() + '</li>';
			}
			// pick selected option
			if ($(this).attr('selected')) {
				$('.rew-button-content', elem).html($(this).text() + ' <span class="ico-arrow"></span>');
			}
			// add dynamic item
			list.append(item);
		});

		// attach onclick
		$('li', list).click(function() {
			// toggle state
			$(this).addClass('selected').siblings('li').removeClass('selected');
			// update select element
			select.val($(this).attr('rel'));
			// show selected title
			$('.rew-button-content', elem).html($(this).text() + ' <span class="ico-arrow"></span>');
			// hide menu list
			menu.hide();
		});

	});

}