function getActualLinkTarget(alleged_link_target){
	if (alleged_link_target.is('a')){
		return alleged_link_target;
	} else {
		return alleged_link_target.parents('a');
	}
}
function bindTabs(){
	$(document).ready(function(){
		$("[ui_binding='tab']").click(function(e){
			switch($(e.target).attr('ui_binding')){
				case 'tab':
					real_target = $(e.target)
					break;
				default:
					real_target = $(e.target).parents("[ui_binding='tab']:first");
					break;
			}
			$("[ui_binding='tab'][ui_set='" + real_target.attr('ui_set') + "']").removeClass('selected');
			real_target.addClass('selected');
			$("[ui_binding='tab_content'][ui_set='" + real_target.attr('ui_set') + "']").hide();
			$('#' + real_target.attr('ui_tab')).show();
		});
	});
};
function bindExpanders(){
	$(document).ready(function(){
		$("[ui_binding='expander'][ui_action='expand']").unbind('click');
		$("[ui_binding='expander'][ui_action='expand']").click(function(e){
			actual_target = getActualLinkTarget($(e.target));
			$("[ui_binding='expander'][ui_state='expanded'][ui_id='" + actual_target.attr('ui_id') + "']").show();
			$("[ui_binding='expander'][ui_state='contracted'][ui_id='" + actual_target.attr('ui_id') + "']").hide();
		});
		$("[ui_binding='expander'][ui_action='contract']").unbind('click');
		$("[ui_binding='expander'][ui_action='contract']").click(function(e){
			actual_target = getActualLinkTarget($(e.target));
			$("[ui_binding='expander'][ui_state='expanded'][ui_id='" + actual_target.attr('ui_id') + "']").hide();
			$("[ui_binding='expander'][ui_state='contracted'][ui_id='" + actual_target.attr('ui_id') + "']").show();
		});
	});
};
function bindExpander(expandable){
		$("[ui_binding='expander'][ui_action='expand'][ui_id='" + expandable + "']").click(function(e){
			actual_target = getActualLinkTarget($(e.target));
			$("[ui_binding='expander'][ui_state='expanded'][ui_id='" + actual_target.attr('ui_id') + "']").show();
			$("[ui_binding='expander'][ui_state='contracted'][ui_id='" + actual_target.attr('ui_id') + "']").hide();
		});
		$("[ui_binding='expander'][ui_action='contract'][ui_id='" + expandable + "']").click(function(e){
			actual_target = getActualLinkTarget($(e.target));
			$("[ui_binding='expander'][ui_state='expanded'][ui_id='" + actual_target.attr('ui_id') + "']").hide();
			$("[ui_binding='expander'][ui_state='contracted'][ui_id='" + actual_target.attr('ui_id') + "']").show();
		});
}
function bindSortables(){
	$(document).ready(function(){
		$("[ui_binding='sortable']").sortable({
			update: function(e,ui){
				$.ajax({
					type: 'PUT', 
					url: $(this).attr('ui_url'),
					data: $(this).sortable('serialize')
				});
				if($(this).attr('ui_update')){
					eval($(this).attr('ui_update'));
				}
			},
			handle: ($(this).find("[ui_binding='sortable_drag_handle']").length == 0) ? false : "[ui_binding='sortable_drag_handle']"
		});
	});
}
function showLoadingMessage(message){
	$("[data-binding='loading_message']").html(message);
};
function showAjaxLoadingMessage(target_id,message){
	$('#' + target_id).html(message);
};
function bindFormFocusHelp(){
	$("[data-binding='form_focus_help']").focus(function(e){
		$('#' + $(e.target).attr('data-help-div')).show();
	});
	$("[data-binding='form_focus_help']").blur(function(e){
		$('#' + $(e.target).attr('data-help-div')).hide();
	});
	$("[data-binding='hover_help']").mouseover(function(e){
		actual_target = getActualLinkTarget($(e.target))
		$('#' + actual_target.attr('data-help-div')).show();
	});
	$("[data-binding='hover_help']").mouseout(function(e){
		actual_target = getActualLinkTarget($(e.target))
		$('#' + actual_target.attr('data-help-div')).hide();
	});
};
function bindHoverShowMore(){
	$("[data-binding='hover_show_more']").hover(
		function(){$('#' + $(this).attr('data-hover-div')).show();},
		function(){$('#' + $(this).attr('data-hover-div')).hide();}
	);
}
function bindAccordianHelp(){
	$("[data-binding='toggle_show_help_link']").unbind('click');
	$("[data-binding='toggle_show_help_link']").click(function(e){
		actual_target = getActualLinkTarget($(e.target))
		if($('#' + actual_target.attr('data-help-div')).attr('data-animate-method')){
			animate_method = $('#' + actual_target.attr('data-help-div')).attr('data-animate-method');
		} else {
			animate_method = ''
		}
		$('#' + actual_target.attr('data-help-div')).show(animate_method, {direction: 'up'}, 330)
		actual_target.hide();
		$("[data-binding='toggle_hide_help_link'][data-help-div='" + actual_target.attr('data-help-div') + "']").show();
	});
	$("[data-binding='toggle_hide_help_link']").unbind('click');
	$("[data-binding='toggle_hide_help_link']").click(function(e){
		actual_target = getActualLinkTarget($(e.target))
		if($('#' + actual_target.attr('data-help-div')).attr('data-animate-method')){
			animate_method = $('#' + actual_target.attr('data-help-div')).attr('data-animate-method');
		} else {
			animate_method = ''
		}
		$('#' + actual_target.attr('data-help-div')).hide(animate_method, {direction: 'up'}, 330)
		setTimeout("actual_target.hide();\n$(\"[data-binding='toggle_show_help_link'][data-help-div='\" + actual_target.attr('data-help-div') + \"']\").show();",330);
	});
};
function bindImageWithStates(){
	$("[data-binding='image_state_normal']").mouseover(function(e){
		$("[data-binding='image_state_normal'][data-group='" + $(e.target).attr('data-group') + "']").hide();
		$("[data-binding='image_state_active'][data-group='" + $(e.target).attr('data-group') + "']").hide();
		$("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").show();
	});
	$("[data-binding='image_state_hover']").mousedown(function(e){
		if(	$("[data-binding='image_state_active'][data-group='" + $(e.target).attr('data-group') + "']")){
			$("[data-binding='image_state_normal'][data-group='" + $(e.target).attr('data-group') + "']").hide();
			$("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").hide();
			$("[data-binding='image_state_active'][data-group='" + $(e.target).attr('data-group') + "']").show();
		};
	});
	$("[data-binding='image_state_hover']").mouseout(function(e){
		$(e.target).hide();
		$("[data-binding='image_state_normal'][data-group='" + $(e.target).attr('data-group') + "']").show();
	});
	$("[data-binding='image_state_active']").mouseup(function(e){
		$("[data-binding='image_state_normal'][data-group='" + $(e.target).attr('data-group') + "']").hide();
		$("[data-binding='image_state_active'][data-group='" + $(e.target).attr('data-group') + "']").hide();
		$("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").show();
		if ($("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").parents('form').length > 0){
			$("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").parents('form').submit();
		} else {
			document.location.href = $("[data-binding='image_state_hover'][data-group='" + $(e.target).attr('data-group') + "']").parents('a').attr('href');
		}
		return false;
	});
	$("[data-binding='image_state_hover']").hide();
	$("[data-binding='image_state_active']").hide();
};

function bindImageSwaps(){
	$(document).ready(function(){
		$("[data-binding='image_swap_trigger']").click(function(e){
			switch($(e.target).attr('data-binding')){
				case 'image_swap_trigger':
					real_target = $(e.target)
					break;
				default:
					real_target = $(e.target).parents("[data-binding='image_swap_trigger']");
					break;
			}
			$("[data-binding='image_swap_trigger']").removeClass('selected');
			real_target.addClass('selected');
			$("[data-binding='image_swap_target']").hide();
			$('#' + real_target.attr('data-image_swap_target')).show();
		});
	});
};
function bindPagers(){
	$("[data-page_role='page_arrow']").unbind('click');
	$("[data-page_role='page_arrow']").click(function(e){
		pager_id = $(e.target).attr('data-page_id');
		container = $("[data-page_role='container'][data-page_id='" + pager_id + "']");
		direction = $(e.target).attr('data-page_direction');
		if (!container.data('page_position')){
			container.data('page_position',0);
		}
		viewport_width = parseInt(container.attr('data-viewport_width'));
		item_count = parseInt(container.attr('data-item_count'));
		page_views = item_count - parseInt(container.attr('data-items_per_page'));
		if(direction == 'left'){
			left_arrow = $(e.target);
			right_arrow = $("[data-page_role='page_arrow'][data-page_direction='right'][data-page_id='" + pager_id + "']");
			container.data('page_position',container.data('page_position') - 1);
		} else {
			right_arrow = $(e.target);
			left_arrow = $("[data-page_role='page_arrow'][data-page_direction='left'][data-page_id='" + pager_id + "']");
			container.data('page_position',container.data('page_position') + 1);
		}
		left_arrow_wrapper = left_arrow.parents("[data-page_role='page_arrow_wrapper']:first");
		right_arrow_wrapper = right_arrow.parents("[data-page_role='page_arrow_wrapper']:first");
		if (container.data('page_position') == 0) {
			left_arrow_wrapper.hide();
		}
		if (container.data('page_position') == page_views) {
			right_arrow_wrapper.hide();
		}
		if (container.data('page_position') != 0) {
			left_arrow_wrapper.show();
		}
		if (container.data('page_position') != page_views) {
			right_arrow_wrapper.show();
		}
		left_position = container.data('page_position') * viewport_width;
		left_position = -left_position;
		left_position_css = left_position + 'px';
		container.animate({left:left_position_css},330);
		return false;
	});
}
function focusField(element,default_value){
	if($(element).val() == default_value){
		$(element).val('');
	}
}
function blurField(element,default_value){
	if($(element).val() == ''){
		$(element).val(default_value);
	}
}
function removeErrorStyling(){
	$('.fieldWithErrors').each(function(){
		new_html = $(this).html();
		$(this).hide();
		$(this).after(new_html);
		$(this).remove();
	});
	$('.error_text').remove();
}

$(document).ready(function(){
	bindFormFocusHelp();
	bindAccordianHelp();
	bindImageWithStates();
});
