targetIncludes = (target, item)-> target and target.indexOf(item) isnt -1

checkIf =
	isDefined: (subject)-> subject isnt undefined
	
	isArray: (subject)-> subject instanceof Array
	
	isObject: (subject)-> typeof subject is 'object' and subject # 2nd check is to test against 'null' values

	isString: (subject)-> typeof subject is 'string'
	
	isNumber: (subject)-> typeof subject is 'number'
	
	isFunction: (subject)-> typeof subject is 'function'

	isBindingInterface: (subject)-> subject instanceof BindingInterface
	
	# simplyimport:if BUNDLE_TARGET = 'browser'
	isBinding: (subject)-> subject instanceof Binding

	isIterable: (subject)-> checkIf.isObject(subject) and checkIf.isNumber(subject.length)

	isDom: (subject)-> subject.nodeName and subject.nodeType is 1

	isDomInput: (subject)->
		nodeName = subject.nodeName
		return nodeName is 'INPUT' or nodeName is 'TEXTAREA' or nodeName is 'SELECT'

	isDomRadio: (subject)-> subject.type is 'radio'

	isDomCheckbox: (subject)-> subject.type is 'checkbox'

	isElCollection: (subject)-> (subject instanceof NodeList) or (subject instanceof HTMLCollection) or (window.jQuery and subject instanceof jQuery)

	domElsAreSame: (iterable)->
		type = iterable[0].type
		itemsWithSameType = [].filter.call iterable, (item)-> item.type is type

		return itemsWithSameType.length is iterable.length

	isDomNode: (subject)-> checkIf.isDom(subject) or subject is window or subject is document
	# simplyimport:end