//层可移动与否标志
var moveFlg;
//当前事件对象
var eObj;
//旧X坐标
var oX;
//旧Y坐标
var oY;
//便签条计数器
var note_Count;
//当前最大便签ID
var max_Id = 0;


//加载启动事件
herowk.addEvent(window,'load',function(){
	
	//设置层可移动
	moveFlg = true;
	//计数器置0
	note_Count = 0;
	/**
	 *  创建便签条函数
	 *  @data ：JSON类型数据，包含便签条创建时间、内容、作者、最后修订者等信息
	 */
	function createNotes(data){
		if(!data) return;
		//计数器累加
		note_Count = note_Count + 1;
		//创建外层
		var divOut = document.createElement('DIV');
		divOut.setAttribute('id','outter' + data['ID']);
		divOut.className = 'noteOutter';
		//创建内容层
		var divIn = document.createElement('DIV');
		divIn.setAttribute('id','inner' + data['ID']);
		divIn.className = 'noteInner';
		divOut.appendChild(divIn);
		//创建文字节点
		var pContent = document.createElement('P');
		divIn.appendChild(pContent);
		//var str = str_from_unicode(data['CONTENTS']);
		var contents = document.createTextNode(data['CONTENTS']);
		pContent.appendChild(contents);
		
		//设置该便签条的left和top
		var left = Math.ceil(Math.random()*900);
		var top = Math.ceil(Math.random()*400 + 100);
		divOut.style.left = left + 'px';
		divOut.style.top = top + 'px';
		
		//将所创建的数据便签条添加到页面中
		herowk.$('main').appendChild(divOut);
		
		//逐个设置相应事件
		herowk.addEvent(divOut,'mousedown',doMouseDown);
		herowk.addEvent(divOut,'mousemove',doMouseMove);
		herowk.addEvent(divOut,'mouseup',doMouseUp);
		
		//添加便签条双击事件
		herowk.addEvent(divIn,'dblclick',doDblClick);
		
		//设置当前最大ID
		if(data['ID']>max_Id)
		    max_Id = data['ID'];
		    
		//返回当前创建的便签条
		return divOut.id;
	}
	
	/**
	 *  新建便签条函数
	 * 
	 */
	function createNewNote(){

		//计数器累加
		note_Count = note_Count + 1;
		//ID最大值累加
		max_Id = max_Id + 1;
		//创建外层
		var divOut = document.createElement('DIV');
		divOut.setAttribute('id','outter' + max_Id);
		divOut.className = 'noteOutter';
		//创建内容层
		var divIn = document.createElement('DIV');
		divIn.setAttribute('id','inner' + max_Id);
		divIn.className = 'noteInner';
		divOut.appendChild(divIn);
		//创建文字节点
		var pContent = document.createElement('P');
		divIn.appendChild(pContent);
		var contents = document.createTextNode("Add contents here!");
		pContent.appendChild(contents);
		
		//设置该便签条的left和top
		var left = Math.ceil(Math.random()*900);
		var top = Math.ceil(Math.random()*500);
		divOut.style.left = left + 'px';
		divOut.style.top = top + 'px';
		divOut.style.zIndex = getMaxIndex() + 1;
		
		//将所创建的数据便签条添加到页面中
		herowk.$('main').appendChild(divOut);
		
		//设置相应事件
		herowk.addEvent(divOut,'mousedown',doMouseDown);
		herowk.addEvent(divOut,'mousemove',doMouseMove);
		herowk.addEvent(divOut,'mouseup',doMouseUp);
		//双击事件
		herowk.addEvent(divIn,'dblclick',doDblClick);
	}
	/**
	 *  鼠标按下事件
	 *  @W3CEvent ：鼠标事件对象
	 */
	function doMouseDown(W3CEvent){
		if (!moveFlg) return;
		if (!W3CEvent) W3CEvent = herowk.getEventObj(W3CEvent);

		eObj = this;
        document.all ? eObj.setCapture() : window.captureEvents(Event.MOUSEMOVE);
		
		//取得当前鼠标坐标
		var pointer = herowk.getPointerPositionInDocument(W3CEvent);

		//保存当前坐标
		if (isNaN(parseInt(eObj.style.left))) {
			oX = pointer.x - 0;
		} else {
			oX = pointer.x - parseInt(eObj.style.left);
		}
        if (isNaN(parseInt(eObj.style.top))) {
			oY = pointer.y - 100;
		} else {
        	oY = pointer.y - parseInt(eObj.style.top);
		}
        this.style.zIndex = getMaxIndex() + 1;
	}

	/**
	 *  鼠标移动事件
	 *  @W3CEvent ：鼠标事件对象
	 */
	function doMouseMove(W3CEvent){
	    if (!eObj) return;
        if (!W3CEvent) W3CEvent = herowk.getEventObj(W3CEvent);
		
		//取得当前鼠标坐标
		var pointer = herowk.getPointerPositionInDocument(W3CEvent);
		
		//eObj.style.cursor = 'hand';
        eObj.style.left = (pointer.x - oX) + "px"; 
		eObj.style.top = (pointer.y - oY) + "px";
	}

	/**
	 *  鼠标弹起事件
	 *  @W3CEvent ：鼠标事件对象
	 */
	function doMouseUp(W3CEvent){
	    if (!eObj) return;
		if (!W3CEvent) W3CEvent = herowk.getEventObj(W3CEvent);
		//eObj.style.cursor= "auto";
        document.all ? eObj.releaseCapture() : window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
        eObj = "";
	}

	/**
	 *  取得最大的zIndex方法
	 *  
	 */
	function getMaxIndex() {
            var index = 0;
            var ds = herowk.$('main').getElementsByTagName('div');
            var l = herowk.$('main').getElementsByTagName('div').length;
            for (i = 0; i < l; i++) {
                if (ds[i].style.zIndex > index) {
					index = ds[i].style.zIndex;
				}
				ds[i].style.zIndex = 0;
            }
            return index;
    	}
	
	/**
	 *  鼠标双击事件
	 *  
	 */
	function doDblClick(){
		//设置移动标志
		moveFlg = false;
		//创建编辑框
		var tmpDiv = document.createElement('DIV');
		tmpDiv.setAttribute('id','tmp_Editor');
		tmpDiv.className = 'editor';
		var tmpEditArea = document.createElement('TEXTAREA');
		tmpEditArea.setAttribute('id','eArea');
		tmpEditArea.setAttribute('onchange','alert(110);if(value.length>120) value=value.substr(0,120)');
		tmpEditArea.className = 'editorInside';
		
		//判断节点类型，非IE中会有TEXT_NODE，此处需要去除
		var objCon =this.firstChild
		if (objCon.nodeType == herowk.node.TEXT_NODE)
			objCon = objCon.nextSibling;
		var str = objCon.innerHTML.toString().trim(this.innerHTML);
		var reg=new RegExp("<br>","g");
		str= str.replace(reg,"\r\n");
		tmpEditArea.value = str;
		//将编辑框添加到当前层下
		tmpDiv.appendChild(tmpEditArea);
		this.parentNode.appendChild(tmpDiv);
		//添加失去焦点事件
		herowk.addEvent(herowk.$('eArea'),'blur',doBlur);
		//原内容层隐藏
		herowk.toggleDisplay(this);
		//设置焦点到编辑框
		tmpEditArea.focus();
		//var r = herowk.$('eArea').createTextRange();
		//r.move('character',str.length);
		
	}
	
	/**
	 *  编辑框焦点离开事件
	 *  
	 */
	function doBlur(){
		moveFlg = true;
		var objCon = this.parentNode.parentNode.firstChild;
		//判断节点类型，非IE中会有TEXT_NODE，此处需要去除
		if (objCon.nodeType == herowk.node.TEXT_NODE)
			objCon = objCon.nextSibling;
		//将原来隐藏的内容层显示
		herowk.toggleDisplay(objCon);

		//将编辑框的内容填入表示层
		var newp = document.createElement("p");
    		newp.innerText = this.value;
		objCon.innerHTML = "";
		objCon.appendChild(newp);
		this.parentNode.parentNode.removeChild(this.parentNode);
		
		//拼接POST链接
		var str_contents = this.value;//.replace("/\"/g","\\\"");
		var nodeId = objCon.parentNode.id.substring(6);
		//alert(nodeId);
		var postLink = "/saveNote.php?contents=" + str_contents + "&noteId=" + nodeId;
		
		herowk.ajaxRequest(postLink,{method:'GET',
											completeListener:function(){
												var res = this.responseText;
												//herowk.log.writeRaw(res);
												//返回结果判断
												if(res != "true"){
													alert("Sorry,there is an error when save the note,plese try again!");
												}
											},
						   					errorListener:function(){
												alert("Sorry,there is an error when save the note,plese try again!");
											}});
	}
	
	//取得便签条数据
	var notes;
	herowk.ajaxRequest('/getNotes.php',{method:'GET',completeListener:function(){
					//herowk.log.writeRaw(this.responseText);
					notes = eval(this.responseText);
					//创建便签条
					for(note in notes){
						createNotes(notes[note]);
					}
					}});
	
	//设置新建标签按钮事件
	herowk.addEvent(herowk.$('btnAdd'),'click',createNewNote);
		 });
