/** * This module is used for inputEx examples : * * - Search all
 tags
 *   - decode the HTML entities to get the code
 *   - evalulate & highlight the examples using SyntaxHighlighter
 * 
 * @module inputex-examples
 */
YUI.add('inputex-examples', function (Y) {

   window.Y = Y;
	
	Y.on("domready",function() {
		
		var examples = [], i, length, textarea, code;
		
		// i'm not proud of using n._node ... but the method getDOMNode (http://developer.yahoo.com/yui/3/api/Node.html#method_getDOMNode) is not implemented yet
		Y.all('pre').each(function(n){ examples.push(n._node);},this);
		
		for(i = 0, length = examples.length ; i < length ; i += 1) {
			
			textarea = examples[i];
			
			try {
				// get example code and filter html entities
				code = html_entity_decode(textarea.innerHTML);
				
				// wrap in anonymous to create a separate context for local variables
				// (avoid collision between variables from different examples !)
				code = "(function () {"+code+"}());";
				var inputEx = Y.inputEx;
				eval(code);
			}
			catch(ex) {
				if(console) {
					console.log("Error while executing example "+(i+1), ex);
				}
				// debug: throw ex;
			}
		}
		
		SyntaxHighlighter.highlight();
	});

   
	// Decode html entities
	var html_entity_decode = function (text) {
		text = text.replace(/"/g,'"'); // 34 22
		text = text.replace(/&/g,'&'); // 38 26	
		text = text.replace(/'/g,"'"); // 39 27
		text = text.replace(/</g,'<'); // 60 3C
		text = text.replace(/>/g,'>'); // 62 3E
		text = text.replace(/ˆ/g,'^'); // 94 5E
		text = text.replace(/‘/g,'‘'); // 145 91
		text = text.replace(/’/g,'’'); // 146 92
		text = text.replace(/“/g,'“'); // 147 93
		text = text.replace(/”/g,'”'); // 148 94
		text = text.replace(/•/g,'•'); // 149 95
		text = text.replace(/–/g,'–'); // 150 96
		text = text.replace(/—/g,'—'); // 151 97
		text = text.replace(/˜/g,'˜'); // 152 98
		text = text.replace(/™/g,'™'); // 153 99
		text = text.replace(/š/g,'š'); // 154 9A
		text = text.replace(/›/g,'›'); // 155 9B
		text = text.replace(/œ/g,'œ'); // 156 9C
		text = text.replace(/ť/g,''); // 157 9D
		text = text.replace(/ž/g,'ž'); // 158 9E
		text = text.replace(/Ÿ/g,'Ÿ'); // 159 9F
		text = text.replace(/ /g,' '); // 160 A0
		text = text.replace(/¡/g,'¡'); // 161 A1
		text = text.replace(/¢/g,'¢'); // 162 A2
		text = text.replace(/£/g,'£'); // 163 A3
		text = text.replace(/¤/g,' '); // 164 A4
		text = text.replace(/¥/g,'¥'); // 165 A5
		text = text.replace(/¦/g,'¦'); // 166 A6
		text = text.replace(/§/g,'§'); // 167 A7
		text = text.replace(/¨/g,'¨'); // 168 A8
		text = text.replace(/©/g,'©'); // 169 A9
		text = text.replace(/ª/g,'ª'); // 170 AA
		text = text.replace(/«/g,'«'); // 171 AB
		text = text.replace(/¬/g,'¬'); // 172 AC
		text = text.replace(/­/g,'­'); // 173 AD
		text = text.replace(/®/g,'®'); // 174 AE
		text = text.replace(/¯/g,'¯'); // 175 AF
		text = text.replace(/°/g,'°'); // 176 B0
		text = text.replace(/±/g,'±'); // 177 B1
		text = text.replace(/²/g,'²'); // 178 B2
		text = text.replace(/³/g,'³'); // 179 B3
		text = text.replace(/´/g,'´'); // 180 B4
		text = text.replace(/µ/g,'µ'); // 181 B5
		text = text.replace(/¶/g,'¶'); // 182 B6
		text = text.replace(/·/g,'·'); // 183 B7
		text = text.replace(/¸/g,'¸'); // 184 B8
		text = text.replace(/¹/g,'¹'); // 185 B9
		text = text.replace(/º/g,'º'); // 186 BA
		text = text.replace(/»/g,'»'); // 187 BB
		text = text.replace(/¼/g,'¼'); // 188 BC
		text = text.replace(/½/g,'½'); // 189 BD
		text = text.replace(/¾/g,'¾'); // 190 BE
		text = text.replace(/¿/g,'¿'); // 191 BF
		text = text.replace(/À/g,'À'); // 192 C0
		text = text.replace(/Á/g,'Á'); // 193 C1
		text = text.replace(/Â/g,'Â'); // 194 C2
		text = text.replace(/Ã/g,'Ã'); // 195 C3
		text = text.replace(/Ä/g,'Ä'); // 196 C4
		text = text.replace(/Å/g,'Å'); // 197 C5
		text = text.replace(/Æ/g,'Æ'); // 198 C6
		text = text.replace(/Ç/g,'Ç'); // 199 C7
		text = text.replace(/È/g,'È'); // 200 C8
		text = text.replace(/É/g,'É'); // 201 C9
		text = text.replace(/Ê/g,'Ê'); // 202 CA
		text = text.replace(/Ë/g,'Ë'); // 203 CB
		text = text.replace(/Ì/g,'Ì'); // 204 CC
		text = text.replace(/Í/g,'Í'); // 205 CD
		text = text.replace(/Î/g,'Î'); // 206 CE
		text = text.replace(/Ï/g,'Ï'); // 207 CF
		text = text.replace(/Ð/g,'Ð'); // 208 D0
		text = text.replace(/Ñ/g,'Ñ'); // 209 D1
		text = text.replace(/Ò/g,'Ò'); // 210 D2
		text = text.replace(/Ó/g,'Ó'); // 211 D3
		text = text.replace(/Ô/g,'Ô'); // 212 D4
		text = text.replace(/Õ/g,'Õ'); // 213 D5
		text = text.replace(/Ö/g,'Ö'); // 214 D6
		text = text.replace(/×/g,'×'); // 215 D7
		text = text.replace(/Ø/g,'Ø'); // 216 D8
		text = text.replace(/Ù/g,'Ù'); // 217 D9
		text = text.replace(/Ú/g,'Ú'); // 218 DA
		text = text.replace(/Û/g,'Û'); // 219 DB
		text = text.replace(/Ü/g,'Ü'); // 220 DC
		text = text.replace(/Ý/g,'Ý'); // 221 DD
		text = text.replace(/Þ/g,'Þ'); // 222 DE
		text = text.replace(/ß/g,'ß'); // 223 DF
		text = text.replace(/à/g,'à'); // 224 E0
		text = text.replace(/á/g,'á'); // 225 E1
		text = text.replace(/â/g,'â'); // 226 E2
		text = text.replace(/ã/g,'ã'); // 227 E3
		text = text.replace(/ä/g,'ä'); // 228 E4
		text = text.replace(/å/g,'å'); // 229 E5
		text = text.replace(/æ/g,'æ'); // 230 E6
		text = text.replace(/ç/g,'ç'); // 231 E7
		text = text.replace(/è/g,'è'); // 232 E8
		text = text.replace(/é/g,'é'); // 233 E9
		text = text.replace(/ê/g,'ê'); // 234 EA
		text = text.replace(/ë/g,'ë'); // 235 EB
		text = text.replace(/ì/g,'ì'); // 236 EC
		text = text.replace(/í/g,'í'); // 237 ED
		text = text.replace(/î/g,'î'); // 238 EE
		text = text.replace(/ï/g,'ï'); // 239 EF
		text = text.replace(/ð/g,'ð'); // 240 F0
		text = text.replace(/ñ/g,'ñ'); // 241 F1
		text = text.replace(/ò/g,'ò'); // 242 F2
		text = text.replace(/ó/g,'ó'); // 243 F3
		text = text.replace(/ô/g,'ô'); // 244 F4
		text = text.replace(/õ/g,'õ'); // 245 F5
		text = text.replace(/ö/g,'ö'); // 246 F6
		text = text.replace(/÷/g,'÷'); // 247 F7
		text = text.replace(/ø/g,'ø'); // 248 F8
		text = text.replace(/ù/g,'ù'); // 249 F9
		text = text.replace(/ú/g,'ú'); // 250 FA
		text = text.replace(/û/g,'û'); // 251 FB
		text = text.replace(/ü/g,'ü'); // 252 FC
		text = text.replace(/ý/g,'ý'); // 253 FD
		text = text.replace(/þ/g,'þ'); // 254 FE
		text = text.replace(/ÿ/g,'ÿ'); // 255 FF
		return text;
	};

}, '@VERSION@', {requires: ['inputex']});