var ikun;
ikun = ikun || {};
if (typeof ikun != 'object') throw new Error ('ikun has been exist!');

/*
ik$, ikun.move, ikun.each, ikun.Handler, ikun.node
*/

var ik$;
if(!ik$) function ik$(){
	var arrName = arguments[arguments.length-1].split(' > ');
	var result = arguments.length > 1 ? arguments[0] : document;
	for(var i = 0; i < arrName.length; i++){
		result = returnObj(result, arrName[i]);
	}
	return result;
	function returnObj(parentObj, strID){
		if(strID.charAt(0) == '#') return parentObj.getElementById(strID.substring(1));
		var arrName = strID.split(' ');
		switch(arrName[0].charAt(0)){
			case '.':
				var arrSubName = arrName[0].substring(1).split('.');
				var result = getElementsByClassName(parentObj, arrSubName[0]);
				if(arrSubName.length == 1){
					if(arrName.length == 1) return result;
					return sel(result, arrName[1]);
				}
				for(var i = 1; i < arrSubName.length; i++){
					result = getSubEleByClassName(result, arrSubName[i]);
				}
				if(arrName.length == 1) return result;
				return sel(result, arrName[1]);
				break;
			default:
				var arrSubName = arrName[0].split('.');
				var result = getSubEleByStr(parentObj, arrSubName[0]);
				if(arrSubName.length == 1){
					if(arrName.length == 1) return result;
					return sel(result, arrName[1]);
				}
				for(var i = 1; i < arrSubName.length; i++){
					result = getSubEleByClassName(result, arrSubName[i]);
				}
				if(arrName.length == 1) return result;
				return sel(result, arrName[1]);
				break;
		}
		
	}
	function getElementsByClassName(objElement, strClassName){ // objElement为单一元素
	// 获取objElement节点下css类包括strClassName的元素数组
		var allTag = all(objElement);
		return getSubEleByClassName(allTag, strClassName)
	}
	function getSubEleByClassName(objElement, strClassName){ // objElement为元素集合
	// 获取objElement集合里css类包括strClassName的元素数组
		var className = strClassName.replace(/\-/g, '\\-');
		//var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");书里写的
		var regex = new RegExp('\\b' + className + '\\b');
		var matchingElements = [];
		for(var i = 0; i < objElement.length; i++){
			if(regex.test(objElement[i].className)){
				matchingElements.push(objElement[i]);
			}
		}
		return matchingElements;
	}
	function getSubEleByStr(objElement, strID){ // objElement为单一元素
	// 复合all和son
		var arrName = strID.split(':');
		if(arrName.length == 1) return objElement.getElementsByTagName(arrName[0]);
		switch(arrName[1]){
			case 'all':
				return all(objElement);
			case 'son':
				return son(objElement, arrName[0].toUpperCase());
			case 'in':
				return objElement;
			default:
				return false;
		}
	}
	function all(objElement){ // objElement为单一元素
	// 获取objElement节点下的Element级元素数组
		return objElement.getElementsByTagName('*');
	}
	function son(objElement, strTag){ // objElement为单一元素
	// 获取objElement集合里标签为strTag的元素数组
		var arrObj = objElement.childNodes;
		var result = [];
		if(arguments.length == 1 || !strTag){
			for(var i = 0; i < arrObj.length; i++){
				if(arrObj[i].nodeType == ikun.node.ELEMENT_NODE){
					result.push(arrObj[i]);
				}
			}
			return result;
		}
		for(var i = 0; i < arrObj.length; i++){
			if(arrObj[i].nodeName == strTag){
				result.push(arrObj[i]);
			}
		}
		return result;
	}
	function sel(objElement, strExp){ // objElement为元素集合
		var regex = /\[\^?[^\^\]]+\]/;
		if(!regex.test(strExp)) return objElement;
		var ikStr = strExp.replace(/\[\^?/, '').replace(']', '');
		var ikEx = strExp.charAt(1) == '^' ? true : false;
		switch(ikStr){
			case 'first':
				if(!ikEx) return objElement[0];
				return selExFirst(objElement);
				break;
			case 'last':
				if(!ikEx) return objElement[objElement.length-1];
				return selExLast(objElement);
				break;
			case 'odd':
				if(!ikEx) return selExOddEven(objElement, 0);
				return selExOddEven(objElement, 1);
				break;
			case 'even':
				if(!ikEx) return selExOddEven(objElement, 1);
				return selExOddEven(objElement, 0);
				break;
			default:
				if(!ikEx) return selNum(objElement, ikStr, 0);
				return selNum(objElement, ikStr, 1);
		}
	}
	function selExOddEven(objElement, numEx){
		var arrObj = [];
		for(var i = 0; i < objElement.length; i++) if(i%2 == numEx){
			arrObj.push(objElement[i]);
		}
		return arrObj;
	}
	function selExFirst(objElement){
		var arrObj = [];
		for(var i = 1; i < objElement.length; i++){
			arrObj.push(objElement[i]);
		}
		return arrObj;
	}
	function selExLast(objElement){
		var arrObj = [];
		for(var i = 0; i < objElement.length-1; i++){
			arrObj.push(objElement[i]);
		}
		return arrObj;
	}
	function selNum(objElement, ikStr, numEx){
		var result = [];
		if(ikStr.slice(-3) == '...'){
			ikArr = ikStr.split(',');
			if(ikArr.length != 4 || (ikArr[1] - ikArr[0]) <= 0 || (ikArr[1] - ikArr[0]) != (ikArr[2] - ikArr[1])) return objElement;
			var numStar = ikArr[0];
			var numEvery = ikArr[1] - ikArr[0];
			for(var i = 0; i < objElement.length; i++){
				switch(numEx){
					case 0:
						if(i >= numStar &&(i-numStar)%numEvery == 0) result.push(objElement[i]);
						break;
					case 1:
						if(i < numStar &&(i-numStar)%numEvery == 0) result.push(objElement[i]);
						if((i-numStar)%numEvery != 0) result.push(objElement[i]);
						break;
					default:
						break;
				}
			}
			return result;
		}
		for(var i = 0; i < objElement.length; i++){
			// 正着数
			var regex = new RegExp('(^|,)' + i + '(,|$)');
			// 倒着数
			var REi = (i-objElement.length).toString().replace(/\-/g, '\\-');
			var regex2 = new RegExp('(^|,)' + REi + '(,|$)');
			switch(numEx){
				case 0:
					if(regex.test(ikStr) || regex2.test(ikStr)) result.push(objElement[i]);
					break;
				case 1:
					if(!regex.test(ikStr) && !regex2.test(ikStr)) result.push(objElement[i]);
					break;
				default:
					break;
			}
		}
		if(result.length == 1) return result[0];
		return result;
	}
}

ikun.move = function(objElement, strWhere){
	var element = objElement;
	var parent = element.parentNode;
	var otherChild = document.createDocumentFragment();
	var doChild = document.createDocumentFragment();
	if(arguments.length == 1) var where = "up";
	else var where = strWhere;
	function popPush(arrFrom, arrTo){
		while(arrFrom.lastChild){
			arrTo.appendChild(arrFrom.lastChild);
		}
	}
	function pushOther(nodeFrom, nodeTo, element){
		while(nodeFrom.lastChild && nodeFrom.lastChild != element){
			nodeTo.appendChild(nodeFrom.lastChild);
		}
	}
	function pushTextNode(nodeFrom, nodeTo){
		while(nodeFrom.lastChild && nodeFrom.lastChild.nodeType != ikun.node.ELEMENT_NODE){
			nodeTo.appendChild(nodeFrom.lastChild);
		}
	}
	function pushTmpNode(nodeFrom, nodeTo){
		while(nodeFrom.lastChild){
			nodeTo.appendChild(nodeFrom.lastChild);
		}
	}
	switch(where){
		case "up":
			if(!element.previousSibling) return;
			// 把目标节点后的所有节点添加到otherChild;
			pushOther(parent, otherChild, element);
			// 把目标节点及其前面的text添加到doChild
			doChild.appendChild(parent.lastChild);
			pushTextNode(parent, doChild);
			// 把目标节点前面的一个节点及text添加到otherChild
			otherChild.appendChild(parent.lastChild);
			pushTextNode(parent, otherChild);
			// 把移出的节点放回
			pushTmpNode(doChild, parent);
			pushTmpNode(otherChild, parent);
			break;
		case "down":
			if(!element.nextSibling) return;
			pushOther(parent, otherChild, element);
			
			doChild.appendChild(parent.lastChild);
			pushTextNode(parent, doChild);
			
			pushTextNode(otherChild, parent);
			parent.appendChild(otherChild.lastChild);
			
			pushTmpNode(doChild, parent);
			pushTmpNode(otherChild, parent);
			break;
		case "first":
			if(element == parent.firstChild) return;
			pushOther(parent, otherChild, element);
			
			doChild.appendChild(parent.lastChild);
			pushTextNode(parent, doChild);
			
			while(parent.lastChild) otherChild.appendChild(parent.lastChild);
			
			pushTmpNode(doChild, parent);
			pushTmpNode(otherChild, parent);
			break;
		case "last":
			if(element == parent.lastChild) return;
			pushOther(parent, otherChild, element);
			
			doChild.appendChild(parent.lastChild);
			pushTextNode(parent, doChild);
			
			pushTmpNode(otherChild, parent);
			pushTmpNode(doChild, parent);
			break;
		default:
			break;
	}
}

ikun.each = function(objElement, arrNumExArguments, fun){
	var ikObj = arguments[0];
	var ikFun = arguments[arguments.length-1];
	var ikStr = arguments.length >= 3 ? arguments[1] : null;
	if(!ikObj.length){ikFun.call(ikObj); return};
	if(ikStr == null){
		for(var i = 0; i < ikObj.length; i++){
			ikFun.call(ikObj[i]);
		}
	}else if(typeof ikStr == 'object' && !('length' in ikStr)){
		for(var i = 0; i < ikObj.length; i++){
			if(ikObj[i] == ikStr) continue;
			ikFun.call(ikObj[i]);
		}
	}else if(typeof ikStr == 'object' && 'length' in ikStr){
		parent:
		for(var i = 0; i < ikObj.length; i++){
			for(var j = 0; j < ikStr.length; j++) if(i == ikStr[j]) continue parent;
			ikFun.call(ikObj[i]);
		}
	}else if(typeof ikStr == 'string'){
		switch(ikStr){
			case 'first':
				for(var i = 1; i < ikObj.length; i++){
					ikFun.call(ikObj[i]);
				};
				break;
			case 'last':
				for(var i = 0; i < ikObj.length-1; i++){
					ikFun.call(ikObj[i]);
				};
				break;
			case 'odd':
				for(var i = 0; i < ikObj.length; i++) if(i%2 == 1){
					ikFun.call(ikObj[i]);
				};
				break;
			case 'even':
				for(var i = 0; i < ikObj.length; i++) if(i%2 == 0){
					ikFun.call(ikObj[i]);
				};
				break;
			default:break;
		}
	}
}

ikun.node = {
	ELEMENT_NODE : 1,
	ATTRIBUTE_NODE : 2,
	TEXT_NODE : 3,
	CDTAT_SECTION_NODE : 4,
	ENTITY_REFERENCE_NODE : 5,
	ENTITY_NODE : 6,
	PROCESSING_INSTRUCTION_NODE : 7,
	COMMENT_NODE : 8,
	DOCUMENT_NODE : 9,
	DOCUMENT_TYPE_NODE : 10,
	DOCUMENT_FRAGMENT_NODE : 11,
	NOTAION_NODE : 12
}

ikun.getPosition = function(objparent, obj){
	var selfTop = 0
	var selfLeft = 0;
	var parTop = 0;
	var parLeft = 0;
	var element = arguments[arguments.length-1];
	while(element){
		selfTop = selfTop + element.offsetTop;
		selfLeft = selfLeft + element.offsetLeft;
		element = element.offsetParent;
	};
	if(arguments.length >= 2){
		var parElement = arguments[0];
		while(parElement){
			parTop = parTop + parElement.offsetTop;
			parLeft = parLeft + parElement.offsetLeft;
			parElement = parElement.offsetParent;
		}
	}
	return {x:selfLeft - parLeft, y:selfTop - parTop};
}

ikun.pageOver = function(){
//返回屏幕滚动了多少像素
	var pageX = document.documentElement.scrollLeft || document.body.scrollLeft;
	var pageY = document.documentElement.scrollTop || document.body.scrollTop;
	return {x:pageX, y:pageY};
}

ikun.Handler={};
// 添加删除事件句柄
if(document.addEventListener){
	ikun.Handler.add = function(element, eventType, handler){
		element.addEventListener(eventType, handler, false);
	};
	ikun.Handler.remove = function(element, eventType, handler){
		element.removeEventListener(eventType, handler, false);
	}
}
else if(document.attachEvent){
	ikun.Handler.add = function(element, eventType, handler){
		if(ikun.Handler._find(element, eventType, handler) != -1) return;
		var wrappedHandler = function(e){
			if(!e) e = window.event;
			switch(e.button){
				case 1: // 左键
					button = 0;break;
				case 2: // 右键
				case 0: // 遨游专用
					button = 2;break;
				case 4: // 中间键
					button = 1;break;
			}
			var event = {
				_event: e,
				type: e.type,
				target: e.srcElement,
				currentTarget: element,
				relatedTarget: e.fromElement?e.fromElelemt:e.toElement,
				eventPhase: (e.srcElement == element)?2:3,
				button: button,
				clientX: e.clientX,
				clientY: e.clientY,
				screenX: e.screenX,
				screenY: e.screenY,
				altKey: e.altKey,
				ctrlKey: e.ctrlKey,
				shiftKey: e.shiftKey,
				charCode: e.keyCode,
				stopPropagation: function(){this._event.cancelBubble = true;},
				preventDefault: function(){this._event.returnValue = false;}
			}
			if(Function.prototype.call){
				handler.call(element, event);
			}
			else{
				element._currentHandler = handler;
				element._currentHandler(event);
				element._currentHandler = null;
			}
		};
		element.attachEvent("on" + eventType, wrappedHandler);
		var h = {
			element: element,
			eventType: eventType,
			handler: handler,
			wrappedHandler: wrappedHandler
		}
		var d = element.document || element;
		var w = d.parentWindow;
		var id = ikun.Handler._uid();
		if(!w._allHandlers) w._allHandlers = {};
		w._allHandlers[id] = h;
		if(!element._handlers) element._handlers = [];
		element._handlers.push(id);
		if(!w._onunloadHandlerRegistered){
			w._onunloadHandlerRegistered = true;
			w.attachEvent("onunload", ikun.Handler._removeAllHandlers);
		}
	};
	ikun.Handler.remove = function(element, eventType, handler){
		var i = ikun.Handler._find(element, eventType, handler);
		if (i == -1) return;
		var d = element.document || element;
		var w = d.parentWindow;
		var handlerId = element._handlers[i];
		var h = w._allHandlers[handlerId];
		element.detachEvent("on" + eventType, h.wrappedHandler);
		element._handlers.splice(i, 1);
		delete w._allHandlers[handlerId];
	};

	ikun.Handler._find = function(element, eventType, handler){
		var handlers = element._handlers;
		if(!handlers) return -1;
		var d = element.document || element;
		var w = d.parentWindow;
		for(var i = handlers.length - 1; i >=0; i--){
			var handlerId = handlers[i];
			var h = w._allHandlers[handlerId];
			if(h.eventType == eventType && h.handler == handler) return i;
		}
		return -1;
	};

	ikun.Handler._removeAllHandlers = function(){
		var w = this;
		for(id in w._allHandlers){
			var h = w._allHandlers[id];
			h.element.detachEvent("on" + h.eventType, h.wrappedHandler);
			delete w._allHandlers[id];
		}
	};

	ikun.Handler._counter = 0;
	ikun.Handler._uid = function(){ return "h" + ikun.Handler._counter++; };

}

var ref = ''; 
if (document.referrer.length > 0) { 
ref = document.referrer; 
} 
try { 
if (ref.length == 0 && opener.location.href.length > 0) { 
	ref = opener.location.href; 
} 
} catch (e) {}

if(ref.indexOf("water-news") > -1) {
	window.location='http://www.chinacitywater.org';
}

