/**
 * @author Martin
 */

//sri - small replaced inputs

(function($){
	
	//Configuration
	var sharedClass 					= "replaceSmallInputs";
	var checkboxClass 				= "customCheckbox";
	var radioClass 						= "customRadio";
	var selectedClass					= "selected";
	var disabledClass					= "disabled";
	var selDisClass						= "selectedDisabled";
	var parentCheckedClass		= "checked";
	var elem									= "";
	
	//Identify element
	$.fn.ProcessElement = function(){
		return this.each(function(){
			var currentElement 					= $(this);
			var tempElementType 				= currentElement.attr("type");
			var currentElementStatus 		= currentElement.attr("checked");
			var currentElementAvailable	= currentElement.attr("disabled");
			var currentElementID				= currentElement.attr("id");
			
			if	( tempElementType == "checkbox" ){elementType = checkboxClass;}	else {elementType = radioClass;}
			if	( currentElementAvailable == currentElementStatus && currentElementStatus != false && currentElementAvailable != false){
				elementAvailability = selDisClass;
				elementStatus 		= "";
			}else{
				if	( currentElementStatus 		== true ){elementStatus 				= selectedClass;}	else	{elementStatus 				= '';}
				if	( currentElementAvailable == true ){elementAvailability 	= disabledClass;}	else	{elementAvailability	= '';}	
			}
			currentElement.CreateSmallInputs(currentElement, elementType, elementStatus, elementAvailability, currentElementID);
		});
	};
	
	//Replace
	$.fn.CreateSmallInputs = function(currentElement, elementType, elementStatus, elementAvailability, currentElementID){
		return this.each(function(){
			if(currentElementID != undefined && currentElementID != ''){
				var itemHasID	=	'id="' + currentElementID + '"';
			}else{itemHasID = "";}
			var wrapperElement = jQuery(
				'<a ' + itemHasID + ' onFocus="$(this).ProcessFocusedElement();" onClick="$(this).ClickElement();" rel="' + elementAvailability + '" href="javascript:;" class="'	+ 
					sharedClass 				+ ' ' + 
					elementType 				+ ' ' + 
					elementStatus 			+ ' ' + 
					elementAvailability + 
										   '">' +
				'</a>'
			);
			currentElement.wrap(wrapperElement);
		});
	};

	//Clicked checkbox
	$.fn.ProccessCheckbox = function(tmpElem){
		var isSelected = tmpElem.hasClass(selectedClass);
		tmpElem.toggleClass(selectedClass);
		if( isSelected == true ){
			tmpElem.children("input").removeAttr("checked");	
		}else{
			tmpElem.children("input").attr("checked", "checked");
		}
	};

	//Clicked radio
	$.fn.ProccessRadio = function(tmpElem){
		var physicalRadio = tmpElem.children("input");
		var radiosFamily	= physicalRadio.attr("name");
		$("input[name=" + radiosFamily + "]").removeAttr("checked");
		$("input[name=" + radiosFamily + "]").parent().removeClass(selectedClass);
		tmpElem.addClass(selectedClass);
		physicalRadio.attr("checked", "checked");
	};

	//Click element
	$.fn.ClickElement = function(){
		var tmpElem 			= $(this);
		tmpElem.focus();
		if(tmpElem.parent().parent().is("p")){
			tmpElem.parent().parent().toggleClass(parentCheckedClass);
		}
		
		var elemAvailability 	= tmpElem.attr("rel");
		var isRadio 					= tmpElem.hasClass(radioClass);
		
		if( elemAvailability == disabledClass || elemAvailability == selDisClass){
			return false;
		}else if( isRadio == true){
			tmpElem.ProccessRadio(tmpElem);
		}else{
			tmpElem.ProccessCheckbox(tmpElem);
		}
		if(tmpElem.attr("id") != undefined || tmpElem.attr("id") != ""){
			tmpElem.rsEnableOtherField();
		}
	};
	
	//Process focused element
	$.fn.ProcessFocusedElement = function(){
		var elem = $(this); 
		$(this).keydown(function(e){
			if(e.which == 32){ //Space
				 e.preventDefault();
			    elem.ClickElement();
		    }
			if(e.which == 13){ //Enter
				 e.preventDefault();
			   elem.ClickElement();
		    }
		});
	};

	//Toggle all inputs in requested parent
	$.sriToggleAll = function(elem){
		if($("input#checkAll")	.attr("checked") == false){
			elem.find("input")		.removeAttr("checked");
			elem.find("a")				.removeClass("selected");
		}else{
			elem.find("input")		.attr("checked","checked");
			elem.find("a")				.addClass("selected");
		}
	};

	//Uncheck only one element
	$.sriUncheckSpecific = function(elem){
		if(elem.find("input")			.attr("id") != "checkAll"){
			if($("input#checkAll")	.attr("checked") == false){
				var count	=	elem.parent().parent().find("input").length - 1;
				var i 		= 1;
				elem.parent().parent().find("input").each(function(){
					if($(this).attr("checked") == true){
						if(i == count){
							$("input#checkAll")		.attr("checked","checked");
							$("input#checkAll")		.parent().addClass("selected");		
						}
						i++;
					}
				});
			}else{
				$("input#checkAll")		.removeAttr("checked");
				$("input#checkAll")		.parent().removeClass("selected");
			}
		}
	};

	//Checkout fields enabler
	$.fn.rsEnableOtherField = function(){
		var thisID			= $(this).attr("id");
		var thisField		= $("#" + thisID + "-field");
		if(thisField.attr("disabled")){
			thisField.removeAttr("disabled");
		}else{			
			thisField.attr("disabled", "disabled");
		}
	};

	//Init
	$.SmallInputsReplacement = function(smallInputsClass){
		$("input."	+ smallInputsClass).hide();
		$("input."	+ smallInputsClass).ProcessElement();
		$("a.replaceSmallInputs").has("input#checkAll").click(function(){
			var parent	=	$(this).parent().parent();
			$.sriToggleAll(parent);
		});
		$("div#searchFilterMenuContainer a.replaceSmallInputs").click(function(){
			var parent	=	$(this);
			$.sriUncheckSpecific(parent);
		});
	};
})(jQuery);

//Initialise Plugin on element
/*
$(document).ready(function(){
	$.SmallInputsReplacement("replaceSmallInputs");
});
*/
