function CoolPoint(aoConf){
	var U;
	if(typeof CNMS_Util == "undefined"){
		U = iUtil();
	}else{
		U = CNMS_Util();
	}
	var obj = {};
	obj.data = {};
	obj.view = {};	
	obj.ctrl = {};
	obj.dom = {};	
	obj.event = {};
	
	obj.ctrl.postUrl = aoConf.postUrl || "http://music.myspace.cn/jsi.php?act=add_kudian&playlist_id=1&playlist_user_id=1300000000";	
	
	obj.dom = aoConf.dom || {
		wrapper:"",
		lastGroup:"",
		nextGroup:"",
		submit:"",
		score:""
	};
		
	obj.event.clickLast = function(){};
	obj.event.clickNext = function(){};
	obj.event.submit = function(){	
		//obj.dom.submit.style.visibility = "hidden"; //disabled by csj
		obj.dom.score.innerHTML = parseInt(obj.dom.score.innerHTML) + 1;
	};
	
	
	obj.smartList = smartListWithPager(aoConf.smartListConf);
	obj.smartList.event.getData = function(aoData){
		var lxData = aoData.List;
		for(var i=0; i<lxData.length; i++) {
			var loData = lxData[i];
			loData["ImageM"] = loData["Image"].replace("c_","m_") 
			obj.tip.data[loData.UserId] = loData;					
		}		
	};
	obj.smartList.event.buildUI = function(){
		obj.tip.listen();
		obj.changeTriggerStatus();
	}

	obj.tip = Tip_v2(aoConf.tipConf);
	obj.tip.dom.getItems = function(){
		return obj.dom.wrapper.getElementsByTagName("img");
	};
	
	obj.listen = listen;
	obj.buildUI = buildUI;
	obj.changeTriggerStatus = changeTriggerStatus;
	obj.refreshFirstPage = refreshFirstPage;
    obj.submit = submit;	
	return obj;
	
	function listen(){
		U.addEvent(obj.dom.lastGroup,"click",clickLastHandler);
		U.addEvent(obj.dom.nextGroup,"click",clickNextHandler);
		U.addEvent(obj.dom.submit,"click",submitHandler);
		
		function clickLastHandler(){
			obj.smartList.pager.ctrl.curPage = obj.smartList.pager.ctrl.curPage - 1;
			obj.buildUI();
			obj.event.clickLast();
		}
		function clickNextHandler(){
			obj.smartList.pager.ctrl.curPage = obj.smartList.pager.ctrl.curPage + 1;
			obj.buildUI();
			obj.event.clickNext();
		}
		function submitHandler(){
			obj.submit();
		}	
	}
	function submit(){
		var loRequest={
			"url": obj.ctrl.postUrl,
			"contentType":"application/x-www-form-urlencoded",
			"data":obj.ctrl.postUrl.split("?")[1]
		};
		var loResp = U.json2Obj(U.ajax(loRequest));
		action(loResp);		
		function action(aoData){
			if(aoData.Result == "0"){
				obj.refreshFirstPage();	
				obj.event.submit();	
			}else{
				alert(aoData.Msg);
			}
		}
	}
	function buildUI(){
		obj.smartList.buildUI();
    	if(obj.event.buildUI){    		
    		obj.event.buildUI();
    	}
	}
	function refreshFirstPage(){
		obj.smartList.data = {};
		obj.smartList.pager.ctrl.curPage = 1;
		obj.buildUI();		
	}
	function changeTriggerStatus(){
		var liCurPage = obj.smartList.pager.ctrl.curPage;
		var liTotalPage = obj.smartList.pager.ctrl.totalPage;
		if(liCurPage <= 1){
			obj.dom.lastGroup.style.visibility = "hidden";
		}else{
			obj.dom.lastGroup.style.visibility = "";
		}
		if(liCurPage >= liTotalPage){
			obj.dom.nextGroup.style.visibility = "hidden";
		}else{
			obj.dom.nextGroup.style.visibility = "";
		}		
	}
	function iUtil(){
		return {
			addEvent:function(aeTag, asEvt, afHandler){
			    if (!aeTag) {
			        return false;
			    }
			    if (navigator.userAgent.indexOf("IE") != -1) {
			        aeTag.attachEvent("on" + asEvt, afHandler);
			    } else {
			        aeTag.addEventListener(asEvt, afHandler, false);
			    }
			},
			ajax:function(aoRequest){
				var loXML = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
				try {
					loXML.open(aoRequest.method || "POST", aoRequest.url, false);
					if (aoRequest.contentType){
						loXML.setRequestHeader("Content-Type", aoRequest.contentType);
					}
					loXML.send(aoRequest.data);
				}
				catch (ex) {
					return "";
				}
				if (loXML != null && loXML.readyState == 4) {
					return loXML.responseText;
				}
				return "";
			},
			json2Obj: function(astr){
				var ljson;
				if(typeof astr == "object"){
					return astr;
				}
				astr = (astr != null) ? astr.split("\n").join("").split("\r").join("") : "";
				if (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(astr.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) {
					if (astr != "") {
						ljson = eval('(' + astr + ')');
						return ljson;
					}
				}
				return {};
			},			
			smartView:function(asHTML, axData){
			    var lxLeft = asHTML.split("{K:");
			    var lxHTML = [];
			    if(!axData){
			    	return false;
			    }
				if(axData.constructor != Array){
					if(axData.constructor == Number){
						var liIndex = axData;
						axData = [];				
						axData[liIndex - 1] = {};
					}else{
						axData = [axData];	
					}
				}
			    for (var i = 0; axData && i < axData.length; i++) {
			        for (var j = 0; j < lxLeft.length; j++) {
			            var lsProp = lxLeft[j].substring(0, lxLeft[j].indexOf("}"));
			            if (lsProp != "") {
			            	if(lsProp == "k"){            		
			            		lxHTML[lxHTML.length] = i;
			                	lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
			            	}else{
			            		lxHTML[lxHTML.length] = axData[i][lsProp];
			                	lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
			            	}
			               
			            }
			            else {
			                lxHTML[lxHTML.length] = lxLeft[j];
			            }
			        }
			    }
			    return lxHTML.join("");
			}
		};		
	}	
}

function Tip_v2(aoConf){
	var U;
	if(typeof CNMS_Util == "undefined"){
		U = iUtil();
	}else{
		U = CNMS_Util();
	}	
	var obj = {};
	obj.data = {};
	obj.ctrl = {};
	obj.ctrl.tipClassName= aoConf.tipClassName || "kcz_tipWrapper";
	
	obj.dom = {};
	obj.dom.getItems = aoConf.getItems || function(){};
	obj.dom.getTip = getTip;
	
	obj.view = {};
	obj.view.tip = aoConf.tipView || "";
	
	obj.event = {};
	
	obj.listen = listen;
	obj.buildUI = buildUI;
	obj.getData = getData;
	obj.getKey = getKey;
	obj.show = show;
	obj.hide = hide;
	obj.locate = locate;
	return obj;
	

	function getTip(){
		var lsTipId = "_"+obj.ctrl.tipClassName;
		var leTip = document.getElementById(lsTipId);
		if(!leTip){
			leTip = document.createElement("div");
			leTip.id = lsTipId;
			leTip.className = obj.ctrl.tipClassName
			document.body.appendChild(leTip);
		}
		return leTip;
	}
	
	function listen(){
		var lxItem = obj.dom.getItems();
		for(var i=0;i<lxItem.length;i++){
			var leItem = lxItem[i];
			leItem.onmouseout = outHandler;
			leItem.onmouseover = overHandler;
			leItem.onmousemove = moveHandler;
		}
		function outHandler(){
			hide();
		}
		function overHandler(event){
			event = event || window.event;			
			var leItem = event.target || event.srcElement;	
			buildUI(leItem);
		}
		function moveHandler(event){
			event = event || window.event;
			var loMouse = U.getMouse(event);
			locate(loMouse);			
		}
	}
	function buildUI(aeNode){
		var loData = obj.getData(aeNode);
		var leTip = obj.dom.getTip();
		leTip.innerHTML = U.smartView(obj.view.tip,loData);		
		show();
    	if(obj.event.buildUI){
    		obj.event.buildUI();
    	}		
	}
	function getData(aeNode){
		var lsKey = obj.getKey(aeNode);
    	if(obj.event.getData){
    		obj.event.getData();
    	}
		return obj.data[lsKey];
	}
	function getKey(aeNode){
		return aeNode.id; 
	}
	function show(){
		var leTip = obj.dom.getTip();
		leTip.style.display = "block";
	}
	function hide(){
		var leTip = obj.dom.getTip();
		leTip.style.display = "none";		
	}	
	function locate(aoMouse){		
		var leTip = obj.dom.getTip();		
		leTip.style.left = aoMouse.x + 15 + "px";
		leTip.style.top = aoMouse.y + 15 + "px";
	}
	function iUtil(){
		return {
			addEvent:function(aeTag, asEvt, afHandler){
			    if (!aeTag) {
			        return false;
			    }
			    if (navigator.userAgent.indexOf("IE") != -1) {
			        aeTag.attachEvent("on" + asEvt, afHandler);
			    } else {
			        aeTag.addEventListener(asEvt, afHandler, false);
			    }
			},
			getMouse:function(event){
				event = event || windiow.event;
				var isIE = navigator.userAgent.indexOf("IE")!=-1;
				return {
					x: isIE ? event.clientX + document.documentElement.scrollLeft : event.pageX,
					y: isIE ? event.clientY + document.documentElement.scrollTop : event.pageY
				};
			},
			smartView:function(asHTML, axData){
			    var lxLeft = asHTML.split("{K:");
			    var lxHTML = [];
			    if(!axData){
			    	return false;
			    }
				if(axData.constructor != Array){
					if(axData.constructor == Number){
						var liIndex = axData;
						axData = [];				
						axData[liIndex - 1] = {};
					}else{
						axData = [axData];	
					}
				}
			    for (var i = 0; axData && i < axData.length; i++) {
			        for (var j = 0; j < lxLeft.length; j++) {
			            var lsProp = lxLeft[j].substring(0, lxLeft[j].indexOf("}"));
			            if (lsProp != "") {
			            	if(lsProp == "k"){            		
			            		lxHTML[lxHTML.length] = i;
			                	lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
			            	}else{
			            		lxHTML[lxHTML.length] = axData[i][lsProp];
			                	lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
			            	}
			               
			            }
			            else {
			                lxHTML[lxHTML.length] = lxLeft[j];
			            }
			        }
			    }
			    return lxHTML.join("");
			}
		};		
	}	
}
