var template = { html : "<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\"\n  \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<title>Sandbox<\/title>\n<meta http-equiv=\"Content-type\" content=\"text\/html; charset=utf-8\" \/>\n<style type=\"text\/css\" media=\"screen\">\nbody { background-color: #000; font: 16px Helvetica, Arial; color: #fff; }\n<\/style>\n<\/head>\n<body>\n  <p>Hello from JS Bin<\/p>\n  <p id=\"hello\"><\/p>\n<script type=\"text\/javascript\">\n<!-- we run in the footer so no need to use onload -->\n%code%\n<\/script>\n<\/body>\n<\/html>", javascript : "var myArray = [\n   { 'name' : 'some name', id: 111, 'has' : ['dogs'] },\n   { 'name' : 'some name 2', id: 222, 'has' : ['dogs', 'cats'] },\n   { 'name' : 'some name 3', id: 333 , 'has' : ['donkeys', 'goats']},\n   { 'name' : 'some name 4', id: 444, 'has' : ['parrots', 'treasure'] },\n   { 'name' : 'some name 5', id: 555, 'has' : undefined },\n];\n\nvar Find = function(value,obj) {\n\tvar sameArrays = function(arr,arr1) {\n\t\tvar r;\n\t\t\n\t\tif(arr.constructor != Array || arr1.constructor != Array) {return ;}\n\n\t\tif(arr.length != arr1.length) { return ; }\n\t\t\n\t\tfor (var i = arr.length - 1; i >= 0; i--){\n\t\t\tvar value = arr[i],\n\t\t\t\titem = arr1[i];\n\t\t\t\n\t\t\tif(!i in arr1){ return ; }\n\t\t\t\n\t\t\tif ( !Find(value,item) ) {\n\t\t\t\treturn;\n\t\t\t} else { r = true; }\n\t\t};\n\t\t\n\t\treturn r;\n\t};\n\t\n\tvar sameObjects = function(obj,obj1) {\n\t\tvar r;\n\t\t\t\t\n\t\tif(obj.constructor != Object || obj1.constructor != Object) {return;}\n\t\t\n\t\tfor(var i in obj) {\n\t\t\tvar value = obj[i],\n\t\t\t\titem = obj1[i];\n\t\t\t\n\t\t\tif(!obj1.hasOwnProperty(i)){return ;}\n\t\t\t\n\t\t\tif ( !Find(value,item) ) {\n\t\t\t\treturn;\n\t\t\t} else { r = true; }\n\t\t};\n\t\treturn r;\n\t};\n\t\t\n\tvar inArray = function(value,obj) {\n\t\tvar r = [];\n\t\t\n\t\tif(obj.constructor != Array || obj.length === 0 || typeof obj == 'undefined') {return;}\n\t\t\n\t\tif(value.constructor == Array && sameArrays(value,obj)) {\n\t\t\treturn obj;\n\t\t}\n\t\t\n\t\tfor (var i = obj.length - 1; i >= 0; i--){\n\t\t\tvar item = obj[i];\n\t\t\tif( Find(value,item) ) {\n\t\t\t\tr.push( item );\n\t\t\t\/\/\tbreak;\n\t\t\t}\n\t\t};\n\t\t\n\t\treturn (r.length) ? r : undefined ;\n\t};\n\t\n\tvar inObject = function(value,obj) {\n\t\tvar r = [];\n\t\t\n\t\tif(obj.constructor != Object || typeof obj == 'undefined') {return;}\n\t\t\n\t\tif(value.constructor == Object && sameObjects(value,obj)) {\n\t\t\treturn obj;\n\t\t}\n\t\t\n\t\tfor(var i in obj){\n\t\t\tvar item = obj[i];\n\t\t\tif( Find(value,item) ) {\n\t\t\t\tr.push( item );\n\t\t\/\/\t\tbreak;\n\t\t\t}\n\t\t};\n\t\t\n\t\treturn (r.length) ? r : undefined ;\n\t};\n\t\n\tvar inString = function(value,string) {\n\t\tvar\tvalueConstructor = value.constructor,\n\t\t\tstringConstructor = string.constructor;\n\t\t\n\t\tif(valueConstructor == Object || valueConstructor == Array\n\t\t\t|| (stringConstructor != String && stringConstructor != Number)\n\t\t\t|| typeof value === 'undefined' || typeof string === 'undefined' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(value == string) {\n\t\t\treturn string;\n\t\t}\n\t\telse if( valueConstructor == RegExp) {\n\t\t\tstring = (stringConstructor == String) ? string : string+'';\n\t\t\treturn (string.match(value)) ? string : undefined ;\n\t\t}\n\t\telse if( valueConstructor == Function && value(string) == true ) {\n\t\t\treturn string;\n\t\t}\n\t\telse if ( string+'' == value+'' ) {\n\t\t\treturn string;\n\t\t}\n\t\t\n\t};\n\n\tif(typeof obj === 'undefined' || typeof value === 'undefined') {\n\t\treturn;\n\t}\n\t\n\tvar\t_return,\n\t\ttype = value.constructor,\n\t\tobjType = obj.constructor;\n\t\n\tif(value == obj) {\n\t\t_return = obj;\n\t}\n\telse if( objType == Array) {\n\t\t_return = inArray(value,obj);\n\t}\n\telse if (objType == Object ) {\n\t\t_return = inObject(value,obj);\n\t}\n\telse if (( objType == String || objType == Number) && type != Array && type != Object ) {\n\t\t_return = inString(value,obj);\n\t}\n\t\n\treturn _return;\n};\n\nconsole.info(Find({name : \/[^\\d]$\/},myArray), Find(\/2\/,myArray), Find('dogs',myArray), Find(function(value){ return value > 333; },myArray) );" };