/*中文UTF*/

var userAgent = navigator.userAgent.toLowerCase();
var is_webtv = userAgent.indexOf('webtv') != -1;
var is_kon = userAgent.indexOf('konqueror') != -1;
var is_mac = userAgent.indexOf('mac') != -1;
var is_saf = userAgent.indexOf('applewebkit') != -1 || navigator.vendor == 'Apple Computer, Inc.';
var is_opera = userAgent.indexOf('opera') != -1 && opera.version();
var is_moz = (navigator.product == 'Gecko' && !is_saf) && userAgent.substr(userAgent.indexOf('firefox') + 8, 3);
var is_ns = userAgent.indexOf('compatible') == -1 && userAgent.indexOf('mozilla') != -1 && !is_opera && !is_webtv && !is_saf;
var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera && !is_saf && !is_webtv) && userAgent.substr(userAgent.indexOf('msie') + 5, 3);

var body = document.compatMode == "CSS1Compat" ? document.documentElement : document.body;

var maxZIndex = 1000; 

function windowOnload() {
	var imgs = document.getElementsByTagName("img");
	var imgMaxWidth = 700;
	for (i=0;i<imgs.length; i++) {
		var img = imgs[i];
		//alert(img.src + "\r" + img.width + " * " + img.height);
		if (img.width > imgMaxWidth && (!document.all || $("itemList").contains(img))) {
			img.width = imgMaxWidth;
			var ce = document.createElement('a');
			ce.href = img.src;
			ce.target = "_blank";
			img.alt = "点击查看全图 " + img.src;
			img.applyElement(ce, 'outside');
		}
	}
}

function $(id) {
	try{
		switch(typeof(id)){
			case"undefined":
				return null;
			case"object":
				return id;
			default:
				return document.getElementById(id);
		};
	}catch(e){
		return null;
	};
}

function include(sFileName) {
	var objHead = document.getElementsByTagName('head');
	var objScript = document.createElement('script');
	objScript.type = 'text/javascript';
	objScript.src = sFileName;
	objHead[0].appendChild(objScript);
}

function in_array(needle, haystack) {
	if(typeof needle == 'string') {
		for(var i in haystack) {
			if(haystack[i] == needle) {
					return true;
			}
		}
	}
	return false;
}

function isUndefined(variable) {
	return typeof variable == 'undefined' ? true : false;
}

function findtags(parentobj, tag) {
	if(!isUndefined(parentobj.getElementsByTagName)) {
		return parentobj.getElementsByTagName(tag);
	} else if(parentobj.all && parentobj.all.tags) {
		return parentobj.all.tags(tag);
	} else {
		return null;
	}
}

function doane(event) {
	e = event ? event : window.event ;
	if(is_ie) {
		e.returnValue = false;
		e.cancelBubble = true;
	} else {
		e.stopPropagation();
		e.preventDefault();
	}
}

function treeClick(cid) {
	var targetId, srcElement, targetElement;
	srcElement = $('tree' + cid);
	targetElement = $('tree' + cid + "_");
	if (targetElement) {
		iconend = srcElement.src.slice(-7) == 'end.gif' ? '_end' : '';
		if (targetElement.className == "no") {
			srcElement.src =  IMG_URL + "tree/minus" + iconend + ".gif";
			srcElement.alt = "点击收起下级分类";
			targetElement.className = "yes";
		} else {
			srcElement.src = IMG_URL + "tree/plus" + iconend + ".gif";
			srcElement.alt = "点击展开下级分类";
			targetElement.className = "no";
		}
	}
}


if(!Array.prototype.push) {
	Array.prototype.push = function () {
		var startLength = this.length;
		for(var i=0;i<arguments.length;i++) {
			this[startLength+i] = arguments[i];
		}
		return this.length;
	}
}


String.prototype.ulength = function () {
	var c, b = 0, l = this.length;
	while(l) {
		c = this.charCodeAt(--l);
		b += (c < 128) ? 1 : ((c < 2048) ? 2 : ((c < 65536) ? 3 : 4));
	};
	return b;
}

String.prototype.usubstring = function (start, end) {
	var s = '', p = 0;
	
	for (i=0;i<this.length;i++) {
		if (start <= p && p < end) {
			s += this.charAt(i);
		}
		c = this.charCodeAt(i);
		p += c < 128 ? 1 : (c < 2048 ? 2 : (c < 65536 ? 3 : 4));
	}
	return s;
}

String.prototype.usubstr = function (start, l) {
	var s = '', p = 0;
	for (i=0;i<this.length;i++) {
		if (start <= p && p < start + l) {
			s += this.charAt(i);
		}
		c = this.charCodeAt(i);
		p += c < 128 ? 1 : (c < 2048 ? 2 : (c < 65536 ? 3 : 4));
	}
	return s;
}

String.prototype.uindexOf = function (str, starIndex) {
	var p = 0, l = str.length;
	for (i=0;i<this.length;i++) {
		if (this.substring(i, i + l) == str && (starIndex && p >= starIndex)) {
			return p;
		}
		c = this.charCodeAt(i);
		p += c < 128 ? 1 : (c < 2048 ? 2 : (c < 65536 ? 3 : 4));
	}
	return false;
}

Function.prototype.bind = function (object){
	var __method = this;
	return function (){
		__method.apply(object, arguments);
	};
};

Function.prototype.bindArguments = function (object){
	var __method = this;
	var argu = Array.prototype.slice.call(arguments, 1);
	return function (){
		__method.apply(object, argu);
	};
};

Function.prototype.bindAsEventListener = function (object){
	var __method = this;
	return function (event){
		__method.call(object, event||window.event);
	};
};

Function.prototype.timeOut = function(t) {
	var __method = this;

	var argu = Array.prototype.slice.call(arguments, 1);
	var f = function(){
		__method.apply(null, argu);
	}
	return setTimeout(f, t);
}

Object.extend = function (destination,source){
	for(property in source){
		destination[property] = source[property];
	};
	return destination;
};

if(!window.Event){
	var Event = new Object();
};

Object.extend(Event, {
	observers:false,
	
	element: function (event){
		return event.target||event.srcElement;
	},
	
	isLeftClick: function (event){
		return (((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));
	},
	
	pointerX: function (event){
		return event.pageX || (event.clientX + body.scrollLeft);
	},
	
	pointerY: function (event){
		return event.pageY || (event.clientY + body.scrollTop);
	},
	
	stop: function (event){
		if(event.preventDefault){
			event.preventDefault();
			event.stopPropagation();
		}else {
			event.returnValue = false;
			event.cancelBubble = true;
		};
	},
	findElement:function (event,tagName){
		var element=Event.element(event);
		while(element.parentNode && (!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
			element = element.parentNode;
			return element;
	},
	_observeAndCache:function (element,name,observer,useCapture){
		if(!this.observers) this.observers=[];
		if(element.addEventListener){
			this.observers.push([element, name, observer, useCapture]);
			element.addEventListener(name, observer, useCapture);
		}else if(element.attachEvent){
			this.observers.push([element, name, observer ,useCapture]);
			element.attachEvent('on'+name, observer);
		};
	},
	unloadCache:function (){
		if(!Event.observers)return ;
		for(var i=0;i<Event.observers.length;i++){
			Event.stopObserving.apply(this,Event.observers[i]);
			Event.observers[i][0] = null;
		};
		Event.observers = false;
	},
	observe:function (element,name,observer,useCapture){
		var element = $(element);
		useCapture = useCapture || false;
		if(name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/) || element.attachEvent)) {
			name = 'keydown';
		}
		this._observeAndCache(element,name,observer,useCapture);
	},
	
	stopObserving:function (element,name,observer,useCapture){
		var element = $(element);
		useCapture = useCapture || false;
		if(name == 'keypress' && (navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))name='keydown';
		if(element.removeEventListener){
			element.removeEventListener(name,observer,useCapture);
		}else if(element.detachEvent){
			element.detachEvent('on'+name,observer);
		};
	}
});

Event.observe(window,'unload',Event.unloadCache,false);

var Class = function (){
	var _class = function (){
		this.initialize.apply(this,arguments);
	};
	
	for(i=0; i<arguments.length; i++){
		superClass = arguments[i];
		for(member in superClass.prototype){
			_class.prototype[member] = superClass.prototype[member];
		};
	};
	
	_class.child = function (){
		return new Class(this);
	};
	
	_class.extend=function (f){
		for(property in f){
			_class.prototype[property] = f[property];
		};
	};
	
	return _class;
};

//Event.observe(body, 'mousemove', function(){window.status = Event.pointerX(event);}, false);

var dragDrop = new Class();
dragDrop.prototype = {
	ctrlobj: null,
	dragObjs: Array(),
	upObjs: Array(),
	oldX: 0,
	oldY: 0,
//	zIndex: 10000,
	isDraging: false,
	
	
	initialize: function (config){
		this.config = Object.extend({
			
		},
		config||{});
	},
	
	startDrag: function (event) {
		this.isDraging = true;
		this.oldX = Event.pointerX(event);
		this.oldY = Event.pointerY(event);
		
		this.ctrlobj = Event.element(event);
		while (!this.dragObjs[this.ctrlobj.id] && this.ctrlobj.parentNode) {
			this.ctrlobj = this.ctrlobj.parentNode;
		}
		Event.observe(document, 'mousemove', this.moveDrag.bind(this), false);
		Event.observe(document, 'selectstart', Event.stop, false);
	},
	
	endDrag: function () {
		this.isDraging = false;
		Event.stopObserving(document, 'mousemove', this.moveDrag.bind(this), false);
		Event.stopObserving(document, 'selectstart', Event.stop, false);
	},
	
	moveDrag: function (event) {
		if(this.isDraging){
			var X = Event.pointerX(event);
			var Y = Event.pointerY(event);
		//	var s = '';
			var dragObjs = this.dragObjs[this.ctrlobj.id];
			if (dragObjs) {
				for(var id in dragObjs) {
					var obj = dragObjs[id];
					if (!obj) continue;
		//			s += '[' + obj.id + '] left:' + obj.offsetLeft + '  top:' + obj.offsetTop + '    ';
					obj.style.position = 'absolute';
					obj.style.zIndex = ++maxZIndex;
					obj.style.left = obj.offsetLeft + X - this.oldX + 'px';
					obj.style.top = obj.offsetTop + Y - this.oldY + 'px';
				}
			}
			
		//	window.status = s;
			this.oldX = X;
			this.oldY = Y;
		}
	},
	
	up: function(event) {
		obj = Event.element(event);
		while (!in_array(obj.id, this.upObjs) && obj.parentNode) {
			obj = obj.parentNode;
		}
		if (obj.style.zIndex < maxZIndex) {
			obj.style.zIndex = ++maxZIndex;
		}
	},
	
	init: function (ctrlobj) {
		if (typeof ctrlobj == 'string') ctrlobj = $(ctrlobj);
		if (!ctrlobj) return;
		
		var dragObjs = Array();
		if (arguments.length < 2) {
			dragObjs = [ctrlobj];
		} else if (arguments.length == 2 && typeof arguments[1] == 'object' && !arguments[1].id) {
			dragObjs = arguments[1];
		} else {
			for(i=1; i < arguments.length; i++){
				dragObjs.push(arguments[i]);
			}
		}
		for (var obj in dragObjs) {
			if (typeof dragObjs[obj] == 'string') {
				dragObjs[obj] = $(dragObjs[obj]);
			}
			obj = dragObjs[obj];
			if (obj.id) {
				this.upObjs.push(obj.id);
			}
			Event.observe(obj, "click", this.up.bindAsEventListener(this), false);
		}
		
		this.dragObjs[ctrlobj.id] = dragObjs;
		
		ctrlobj.style.cursor = 'move';
		Event.observe(ctrlobj, 'mousedown', this.startDrag.bind(this), false);
		Event.observe(document, 'mouseup', this.endDrag.bind(this), false);
	}
}

var drag = new dragDrop();


Event.observe(window, "load", windowOnload, false);

