// Demostration code for JSL library

// Simple Ajax request
function ajax() {
	var ajax = new XMLHttpRequest();
	if(ajax.readyState===0) {
		ajax.open("get", "highlight.php", true);
		ajax.send(null);
		ajax.onreadystatechange=function() {
			if(ajax.readyState===4) {
				document.getElementById("demosourcecode").innerHTML = ajax.responseText;
				document.location.href = document.location.href.split('#')[0] + '#demosourcecode';
			}
		};
	}
	else
		alert("Your browser doesn't support XMLHttpRequest");
};

// functions for apply test [http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Function:apply]
function applyTest(apply) {
	function product(name, value){
		this.name = name;
		if(value > 1000)
			this.value = 999;
		else
			this.value = value;
	};
	function prod_dept(name, value, dept){
		this.dept = dept;
		if(apply)
			product.apply(this, arguments);
		else
			product.call(this, name, value);
	};
	prod_dept.prototype = new product();
	cheese = new prod_dept("feta", 5, "food");
	car = new prod_dept("honda", 5000, "auto");
	return [cheese.name,cheese.value,cheese.depth,car.name,car.value,car.depth];
};

// onload function
onload = function(){
	
	// Global
	var i = 0, demo = document.getElementById("demoglobal").getElementsByTagName("SPAN"), str = "$JSL is @ devpro";
	demo[i++].innerHTML = "encodeURI: " + encodeURI(str);
	demo[i++].innerHTML = "encodeURIComponent: " + encodeURIComponent(str);
	demo[i++].innerHTML = "decodeURI: " + decodeURI(encodeURI(str));
	demo[i++].innerHTML = "decodeURIComponent: " + decodeURIComponent(encodeURIComponent(str));
	demo[i++].innerHTML = "Error: " + new Error(str).message;
	
	// document
	demo = document.getElementById("demodocument");
	document.getElementById("spanid").innerHTML = "getElementById: " + str;
	demo.getElementsByTagName("SPAN").item(1).innerHTML = "getElementsByTagName: " + str;
	demo.getElementsByTagName("P")[0].innerHTML = "<input type=\"button\" name=\"spanname\" />";
	(document.getElementsByName("spanname")[0]||document.getElementsByName("spanname")).value = "getElementsByName: " + str;
			
	// Object
	i = 0; demo = document.getElementById("demoobject").getElementsByTagName("SPAN")[i];
	demo.innerHTML = "toSource: " + str.toSource();
			
	// Date
	demo = document.getElementById("demodate").getElementsByTagName("SPAN")[i];
	demo.innerHTML = "getYear: " + new Date().getYear();
		
	// Array
	demo = document.getElementById("demoarray").getElementsByTagName("SPAN");
	demo[i++].innerHTML = "pop: " + arr.pop() + " [" + arr + "]";
	demo[i++].innerHTML = "push('e'): " + arr.push("e") + " [" + arr + "]";
	demo[i++].innerHTML = "shift: " + arr.shift() + " [" + arr + "]";
	demo[i++].innerHTML = "splice (1,1,'z'): " + arr.splice(1, 1, "z") + " [" + arr + "]";
	demo[i++].innerHTML = "unshift('a'): " + arr.unshift("a") + " [" + arr + "]";
	demo[i++].innerHTML = "indexOf('d'): " + arr.indexOf("d") + " [" + arr + "]";
	demo[i++].innerHTML = "lastIndexOf('b'): " + arr.lastIndexOf("b") + " [" + arr + "]";
	demo[i++].innerHTML = "every(function(a){return a < 'z'}): " + arr.every(function(a){return a < "z"}) + " [" + arr + "]";
	demo[i++].innerHTML = "filter(function(a){return a < 'z'}): " + arr.filter(function(a){return a < "z"}) + " [" + arr + "]";
	demo[i++].innerHTML = "forEach(function(a){alert('Array.forEach: ' + a)}): <a href='#array' onclick='arr.forEach(function(a){alert(\"Array.forEach: \" + a)})'>test</a> [" + arr + "]";
	demo[i++].innerHTML = "map(function(a){return a+1}): " + arr.map(function(a){return a+1}) + " [" + arr + "]";
	demo[i++].innerHTML = "some(function(a){return a < 'z'}): " + arr.some(function(a){return a < "z"}) + " [" + arr + "]";
	
	// Function
	i = 0; demo = document.getElementById("demofunction").getElementsByTagName("SPAN");
	demo[i++].innerHTML = "apply: " + applyTest(true);
	demo[i++].innerHTML = "call: " + applyTest(false);
	
	// String
	i = 0; demo = document.getElementById("demostring").getElementsByTagName("SPAN");
	demo[i++].innerHTML = "lastIndexOf('is'): " + str.lastIndexOf("is");
	demo[i++].innerHTML = "replace(/(\\w)/g,function(a,b){return b.charCodeAt(0)}): " + str.replace(/(\w)/g,function(a,b){return b.charCodeAt(0)});
};

// Array with a global scope for tests
var arr = ["a","b","c","d","e"];
