/*
Author: Daniel.Liu
Email: dl2k@163.com
*/

	var IE = (navigator.appName.indexOf("Microsoft") >= 0)
	var SAFARI = (navigator.appName.indexOf("Safari") >= 0)

	var $A = Array.from = function(iterable) {
	  if (!iterable) return [];
	  if (iterable.toArray) {
		return iterable.toArray();
	  } else {
		var results = [];
		for (var i = 0; i < iterable.length; i++)
		  results.push(iterable[i]);
		return results;
	  }
	}

	Function.prototype.bind = function() {
	  var __method = this, args = $A(arguments), object = args.shift();
	  return function() {
		return __method.apply(object, args.concat($A(arguments)));
	  }
	};
	
	var Class = {
		create: function() {
			return function() {
				this.initialize.apply(this, arguments);
			}
		},

		inherit: function(obj, b) {			
			if (b == null)
			{
				var ref = Class.create();
				for (r in obj.prototype){ref.prototype[r] = obj.prototype[r];}; 
				return ref;
			}
			else
			{
				for (r in obj.prototype){b.prototype[r] = obj.prototype[r];}; 
				return b;
			}						
		}
	};

	base = Class.create();

	base.prototype = {
		initialize: function(){
//			this.prototype.tName = 'base';
		},
		
		clone: function(){
			ref = new Object();
			for (r in this){ref[r] = this[r];}; 
			for (r in this.prototype){ref.prototype[r] = this.prototype[r];};
			return ref;
		},

		bind: function(t){
			for (r in this){t[r] = this[r];};
			return t;
		}
	};

	function $() {
	  var elements = new Array();

	  for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
		  element = document.getElementById(element);

		if (arguments.length == 1)
		  return element;

		elements.push(element);
	  }

	  return elements;
	};


	var Try = {
	  these: function() {
		var returnValue;

		for (var i = 0; i < arguments.length; i++) {
		  var lambda = arguments[i];
		  try {
			returnValue = lambda();
			break;
		  } catch (e) {}
		}

		return returnValue;
	  }
	};



	// dom operation function

	$cE = function(nodeName, nodeID) {
		if (nodeName == "" || nodeName == null)
		{
			throw "nodeName is empty!";
		}
		var e = document.createElement(nodeName);
		if (nodeID != "" && nodeID != null)
		{
			e.id = nodeID;
		}
		return e;
	};

	$cTE = function (nodeName) {
		if (nodeName == "" || nodeName == null)
		{
			throw "nodeName is empty!";
		}
		var e = document.createTextNode(nodeName);
		return e;
	};

	$getDom = function() {
		try
		{
			if (document.implementation && document.implementation.createDocument) {
				var doc = document.implementation.createDocument("", "", null);

				if (doc.readyState == null) {
					doc.readyState = 1;
					doc.addEventListener("load", function () {
						doc.readyState = 4;
						if (typeof doc.onreadystatechange == "function")
						doc.onreadystatechange();
					}, false);
				}
				return doc;
			}

			if (window.ActiveXObject)
				return Try.these(
					function() { return new ActiveXObject('MSXML2.DomDocument')   },
					function() { return new ActiveXObject('Microsoft.DomDocument')},
					function() { return new ActiveXObject('MSXML.DomDocument')    },
					function() { return new ActiveXObject('MSXML3.DomDocument')   }
				) || false;

			return null;
		}
		catch (e)
		{
			throw e;
		}
	};

	$getDomXml = function(dom) {
		try
		{
			if (IE)
			{
				return dom.xml;
			}
			else
			{
				var xmlSer = new XMLSerializer();				
				return xmlSer.serializeToString(dom);
			}			
		}
		catch (e)
		{
			throw e;
		}
	};

	$setDomXml = function(dom, string) {
		try
		{
			if (IE)
			{
				dom.loadXML(string);
				return dom;
			}
			else
			{
				var p = new DOMParser();
				dom = p.parseFromString(string, 'text/xml');
				return dom;
			}
		}
		catch (e)
		{
			throw e;
		}
	};

	$getDomNode = function(dom, path) {
		try
		{
			if (IE)
			{
				return dom.selectSingleNode(path);
			}
			else
			{
				var ps = path.split("/");
				var ne = dom;
				for (s in ps)
				{
					for (e in ne.childNodes)
					{
						if (ne.childNodes[e].nodeName == ps[s])
						{
							ne = ne.childNodes[e];
							break;
						}
					}
				}

				return ne;
			}			
		}
		catch (e)
		{
			throw e;
		}
	};


	$deSer = function(xmlDoc) {
		try
		{
			if (xmlDoc.childNodes.length == 0)
			{
				var d = xmlDoc.nodeValue;
				return d;
			}
			else 
			{
				var d = {};
				for (var i = 0; i < xmlDoc.childNodes.length; i++)
				{
					var n = xmlDoc.childNodes[i];
					if (n.nodeName == '#text')
					{
						d = n.nodeValue;
					}
					else
					{
						if (d[n.nodeName] == null)
						{
							d[n.nodeName] = $deSer(n); 
						}
						else if (d[n.nodeName].length == null || typeof(d[n.nodeName]) == 'string')
						{
							var temp = d[n.nodeName];
							d[n.nodeName] = new Array();
							d[n.nodeName].push(temp);
							d[n.nodeName].push($deSer(n));
						}
						else
						{
							d[n.nodeName].push($deSer(n));
						}
					}
				}
				return d;
			}
		}
		catch (e)
		{
			throw e;
		}
	};

	Transporter = Class.create();

	Transporter.prototype = {
		initialize: function(szUrl, handler) {
			this.url = szUrl;
			this.handler = handler
		},		

		send: function(req) {
			this.tr = this._getTransport();	
			if (this.tr)
			{			
				this.tr.onreadystatechange = this._dataProcessor.bind(this);
				this.tr.open("GET", this.url, true, "", "");
				this.tr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				this.tr.setRequestHeader("Content-Type", "text/xml;charset=utf-8");
				this.tr.setRequestHeader("Content-Length", req.length);
				this.tr.send(req);
			}
		},

		/// internal function for self call

		_getTransport: function() {
			return Try.these(
				function() {return new ActiveXObject('Microsoft.XMLHTTP')},
				function() {return new ActiveXObject('Msxml2.XMLHTTP')},
				function() {return new XMLHttpRequest()}
			) || false;
		},

		_dataProcessor: function() {
			if (this.tr.readyState == 4)
			{
				if (this.tr.status == 200)
				{					
					var xmlData = this.tr.responseXML;
					this.handler(xmlData);
				}
				else
				{
					//alert("The page you requested was abnormity, cause of " + this.tr.statusText);
				}
			}		
		}
	}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



	var doms;

	var NavNode;

	function Start()
	{
		var tc = $('TextIN');
		
		for(var i = 0; i < textC.length; i++)
		{
			var d = $cE('div');
			tc.appendChild(d);

			d.link = textC[i][1];
			if(d.link == ' ')
			{
				d.className = 'Item';
			}
			else
			{		
				d.onmouseover = doOver;
				d.onmouseout = doOut;
				d.onclick = doClick;
				d.className = 'Item';
				d.style.cursor = 'pointer';
				d.style.color = textC[i][3];
			}

			//d.style.marginLeft = (i + 1) % 3 * 150 + 100 + 'px';
			d.style.marginLeft = textC[i][2] + 'px';

			var tx = $cTE(textC[i][0]);
			d.appendChild(tx);
	


			d.change = toChange;
			d.doChange = cC;
			d.cs = makeColor("#000000", "#777777", 64);
			d.cIndex = 0;

			
		}


		var dom = $('aniPic');

		doms = [];
		NavNode = [];

		var NavBar = $cE('div');
		NavBar.className = 'NavBar';
		$('Text').appendChild(NavBar);

		var l = Math.floor(529 / aniP.length);

		for(var i = 0; i < aniP.length; i++)
		{
			var d = $cE('div');
			d.className = 'imgs';
			d.link = aniP[i][1];
			d.onclick = doClick;

			var im = $cE('img');
			im.src = aniP[i][0];
			d.appendChild(im);

			var node = $cE('div');
			node.className = 'Block';
			node.style.width = l + 'px';
			//node.idx = i;
			//node.onmouseover = function(){playImd(this.idx);};
			//node.onmouseout = stopImd;

			NavBar.appendChild(node);
			NavNode.push(node);

			dom.appendChild(d);
			doms.push(d);
		}

		currentDom = doms[0];
		currentDom.style.display = 'block';
		HighlightNav(0);

		t2 = setInterval(Change, 500);
	}

	function HighlightNav(item)
	{
		for(var i = 0; i < NavNode.length; i++)
		{
			NavNode[i].className = 'Block';
		}
		NavNode[item].className = 'BlockHighlight';
	}


	function doOver()
	{		
		this.change(20);
	}

	function doOut()
	{
		this.change(0);
	}

	function doClick()
	{
		window.open(this.link);
		return;
		if(IE)
			window.navigate(this.link);
		else
			location.href = this.link;
	}

	var inPlay = false;
	var current = 0;
	var next;
	var currentDom;
	var nextDom;
	var offset = 0;
	var timer;
	var t2;
	var sp = -1;


	function Change()
	{
		clearInterval(t2);
		if(sp == current)
			return;

		next = current == doms.length - 1 ? 0 : current + 1;
		if(sp != -1) next = sp;
		ChangeTo(next);
	}

	function ChangeTo(n)
	{		
		inPlay = true;
		nextDom = doms[n];
		nextDom.style.top = '0px';
		nextDom.style.left = '-261px';
		nextDom.style.display = 'block';
		offset = 0;
		timer = setInterval(play, 30);	
	}


	function toChange(colorIndex)
	{
		this.destColor = colorIndex;

		if(true)
		{
			clearInterval(this.timerID);
			this.timerID = setInterval(cC.bind(this), 50);
		}
		else
		{
			this.style.backgroundColor = this.cs[colorIndex];
		}
	}

	function cC()
	{
		if(this.cIndex == this.destColor)
		{
			clearInterval(this.timerID);
			return;
		}

		if(this.destColor > this.cIndex)
			this.cIndex++;
		else
			this.cIndex--;
		this.style.backgroundColor = this.cs[this.cIndex];
	}

	function makeColor(c1, c2, lip)
	{
		var r1 = parseInt(c1.substring(1,3), 16);
		var g1 = parseInt(c1.substring(3,5), 16);
		var b1 = parseInt(c1.substring(5,7), 16);

		var r2 = parseInt(c2.substring(1,3), 16);
		var g2 = parseInt(c2.substring(3,5), 16);
		var b2 = parseInt(c2.substring(5,7), 16);

		var r = [];

		r.push(c1);

		for(var i = 0; i < lip; i++)
		{
			var ng = (g2 - g1) / lip * i + g1; 
			var nr = (r2 - r1) / lip * i + r1;
			var nb = (b2 - b1) / lip * i + b1;
			r.push('rgb(' + Math.ceil(nr) + ',' + Math.ceil(ng) + ',' + Math.ceil(nb) + ')');
		}

		r.push(c2);

		return r;
	}


	function play()
	{
		if(offset > 261)
		{
			clearInterval(timer);
			currentDom.style.display = 'none';
			currentDom = nextDom;
			current = next;
			HighlightNav(current);
			if(current == doms.length) current = 0;
			if(sp == -1)
				t2 = setInterval(Change, 1500);
			else if(sp != current)
				t2 = setInterval(Change, 0);
			inPlay = false;
		}
		else
		{
			currentDom.style.left = offset + 'px';
			nextDom.style.left = offset - 261 + 'px';
			if(offset < 30 || offset > 230)
			{
				offset += 1;
			}
			else
			{
				offset += 5;
			}
		}		
	}

	function playImd(n)
	{
		if(inPlay)
		{
			sp = n;
		}
		else
		{
			sp = n;
			clearInterval(t2);
			Change();
		}
	}

	function stopImd()
	{
		if(inPlay)
		{
			sp = -1;
		}
		else
		{
			sp = -1;
			t2 = setInterval(Change, 1500);
		}
	}

	window.onload = Start;
