﻿/* Fix to Improve IE6 */
if(document.uniqueID && !window.XMLHttpRequest){
	try{
		document.execCommand('BackgroundImageCache', false, true);
	}
	catch(e){
	}
};
var YUE = YAHOO.util.Event;
var YUD = YAHOO.util.Dom;
var YUE = YAHOO.util.Event;
var oResizeTimer = null;
var setHeight = function(){
	var dTagListBody = YUD.getElementsByClassName('bd','div',document.getElementById('tag-list'))[0]
	var dPrototypeListBody = YUD.getElementsByClassName('bd','div',document.getElementById('prototype-list'))[0]
	var iBodyTop = YUD.getY(dPrototypeListBody);
	var iRemainHeight = YUD.getViewportHeight() - iBodyTop;
	YUD.setStyle([dTagListBody,dPrototypeListBody],'height',iRemainHeight-20 + 'px');
	YUD.setStyle([dTagListBody,dPrototypeListBody],'overflow-y','scroll');
	YUD.setStyle([dTagListBody,dPrototypeListBody],'overflow-x','hidden');
	YUD.setStyle([dTagListBody,dPrototypeListBody],'overflow','auto');
	oResizeTimer = null;
};
setHeight();
YUE.on(window,'resize',function(){
	if(!oResizeTimer){
		oResizeTimer = setTimeout(setHeight,100);
	};
})
YAHOO.namespace('PrototypeCenter');
var YPC = YAHOO.PrototypeCenter;
YPC.RestUrl = 'service/rest/index.php';
if(location.href.indexOf('localhost') != -1){
	YPC.ImagePath =  'img/';
}
else if(location.href.indexOf('alpha1') != -1){
	YPC.ImagePath =  'http://tw.yimg.com/i/tw/hp/f2e/';
}
else {
	YPC.ImagePath =  'img/';
};
var oDialog,oTabPanel = null;
var openDialog = function(sUrl,sTitle){
	if(!sUrl){sUrl = 'http://www.josephjiang.com/prototype/open-api-editor/demo.html';}
	var dForm = null;
	var formatDateTime = function(dObj) {
		var sMonth = dObj.getMonth()+1;
		var sDate = dObj.getDate();
		var sHour = dObj.getHours();
		var sMinute = dObj.getMinutes();
		var sSecond = dObj.getSeconds();
		return dObj.getYear() + '-' + sMonth + '-' + sDate + ' ' + sHour + ':' + sMinute + ':' + sSecond;
	};		
	var addComment = function(){
		dForm.elements['unique_id'].value = sUrl;
		dForm.elements['added_date'].value = formatDateTime(new Date());		
		var sRequest = YPC.RestUrl + '?method=comment.add';
		var oCallback = {
			success:function(e){
				if(e.responseText == 'true'){
					alert('新增一筆資料成功')
					getCommentList();					
					dForm.elements['unique_id'].value = '';
					dForm.elements['added_date'].value = '';
					dForm.elements['nickname'].value = '';
					dForm.elements['email'].value = '';
					dForm.elements['url'].value = '';
					dForm.elements['comment'].value = '';
				};
			},
			failure:function(e){
				oDialog.hide();
				alert(e.statusText);
			}
		};
		YUC.setForm(dForm)
		YUC.asyncRequest('POST',sRequest,oCallback);
	};			
	var getCommentList = function() {
		var oCallback = {
			success:function(e){	
				try{
					var oData = eval('(' + e.responseText + ')').items;
				}
				catch(e){
					alert(e.message);
				};
				if(oData.length == 0){
					oTabPanel.activate(0);
					oTabPanel.disableTab(1);
					return;
				}
				oTabPanel.enableTab(1);
				oTabPanel.activate(1);
				var aHtml = ['<ul>'];
				for(var i=0,j=oData.length;i<j;i++){
					aHtml.push('<li>')
					aHtml.push('<div class="info clearfix">');
					if(!oData[i].url){
						aHtml.push('<span class="user">' + oData[i].user + '</span>');
					}
					else {
						aHtml.push('<span class="user"><a href="' + oData[i].email + '" target="_blank">' + oData[i].user + '</a></span>');				
					}
					aHtml.push('<span class="date">' + oData[i].date + '</span>');
					aHtml.push('</div>');
					aHtml.push('<div class="comment">' + oData[i].comment + '</div>');
					aHtml.push('</li>');				
				};
				aHtml.push('</ul>');
				document.getElementById('comment-view').innerHTML = aHtml.join('');
			},
			failure:function(e){
				YAHOO.log(e.statusText);
			}
		};		
		document.getElementById('comment-view').innerHTML = '';
		var sRequestUrl = YPC.RestUrl + '?method=comment.getList&url=' + encodeURIComponent(sUrl);
		YUC.asyncRequest('GET',sRequestUrl,oCallback);
	};	
	if(!oDialog){
		var sHtml = (function(){return [
			'<div class="ydlg-hd">留言簿</div>',
			'<div class="ydlg-bd">',
				'<div class="ydlg-tab" title="新增留言" id="comment-post">',
					'<div class="inner-tab">',
						'<form action="#" method="post">',
							'<input type="hidden" name="added_date"/>',
							'<input type="hidden" name="unique_id"/>',
							'<div>',
								'<label for="nickname">暱稱：</label>',
								'<input type="text" tabindex="1" size="22" id="nickname" name="nickname" />',
							'</div>',
							'<div>',
								'<label for="email">E-Mail：</label>',
								'<input type="text" tabindex="2" size="22" id="email" name="email" />',
							'</div>',
							'<div>',
								'<label for="url">網站：</label>',
								'<input type="text" tabindex="3" size="22" id="url" name="url" />',
							'</div>',
							'<div>',
								'<label for="comment">內容：</label>',
								'<textarea id="comment" name="comment"></textarea>',
							'</div>',
						'</form>',
					'</div>',
				'</div>',
				'<div class="ydlg-tab" title="所有留言" id="comment-view">',
					'<div class="inner-tab"></div>',
				'</div>',
			'</div>'
		].join('')}());
		var dDiv = document.createElement('div');
		dDiv.innerHTML = sHtml;
		document.body.appendChild(dDiv);
		dForm = document.getElementById('comment-post').getElementsByTagName('form')[0]
		YUD.setStyle(dDiv,'visibility','hidden');
		YUD.setStyle(dDiv,'position','absolute');
		YUD.setStyle(dDiv,'top','0');	
		YUD.generateId(dDiv);
		/*
		YUE.on(dForm,'submit',function(oEvent){		
			addComment();
			YUE.stopEvent(oEvent);
			return false;
		});
                     */		
		oDialog = new YAHOO.ext.BasicDialog(dDiv.id,{ 
			modal:false,
			autoTabs:true,
			width:600,
			height:420,
			shadow:true,
			minWidth:300,
			minHeight:300
		});
		oDialog.addKeyListener(27, oDialog.hide, oDialog);
		oDialog.addButton('關閉', oDialog.hide, oDialog);	
		oDialog.addButton('送出', addComment, oDialog);	
		oTabPanel = oDialog.getTabs();				
	};
	oDialog.show();
	oTabPanel.activate(0);
	if(sTitle){
		oDialog.setTitle('關於 ' + sTitle + ' 的留言簿');
	}
	else {
		oDialog.setTitle('留言簿')
	}
	getCommentList();
};
YPC.Module = {
    PostForm:function(sModuleId){
        var dModule = document.getElementById(sModuleId);
        var dSection = YUD.getElementsByClassName('section','div',dModule);
        var dContent = dSection[1];
        var dContentForm = dContent.getElementsByTagName('form')[0];
		var oComponent = this;
		oComponent.module = dModule;

        new F2E.Widget.HTMLEditor(dContentForm.elements['content'],dContentForm.elements['content'].parentNode,'','html');

        YUD.setStyle(dSection,'display','none');
        var onTypeSelect = function(oEvent){
            YUD.setStyle(dSection,'display','none');
            YUD.setStyle(YUD.getElementsByClassName(this.value,'div',dModule)[0],'display','block');
        };
        var dRadios = document.forms['select'].elements['type'];
        YUE.on(dRadios,'click',onTypeSelect);
        //type-url
        var dUrl = dSection[0];
        var oUrlStep = new F2E.Widget.Step(dUrl);
        oUrlStep.addStep(dUrl.getElementsByTagName('fieldset'));
        oUrlStep.hasControl = false;
        oUrlStep.render();
        var dUrlForm = dUrl.getElementsByTagName('form')[0];
        YUE.on(dUrlForm.elements['check'],'click',function(oEvent){
            var oCallback = {
                success:function(oResponse){
                    var oData = eval('(' + oResponse.responseText + ')');
                    dUrlForm.description.value = oData.description;
                    dUrlForm.note.value = oData.note;
                    dUrlForm.tag.value = oData.tag;
                    oUrlStep.next();
                },
                failure:function(oResponse){
                    alert(oResponse.statusText);
                }
            };
            YUC.asyncRequest('GET',YPC.RestUrl + '?method=doc.fetchHtml&url='+encodeURIComponent(dUrlForm.elements['url'].value) + '&r=' + F2E.Util.String.getRandom(),oCallback);
        });
        YUE.on(dUrlForm,'submit',function(oEvent){
            var oCallback = {
                success:function(oResponse){
                    var oData = eval('({' + oResponse.responseText + '})');
                    if(oData.result['@code'] == 'done'){
                        alert('Add a document to base sucessfully.');
                        location.reload();
                    };
                },
                failure:function(oResponse){
                    alert(oResponse.statusText);
                }
            };
            YUC.setForm(this);
            YUC.asyncRequest('POST',YPC.RestUrl + '?method=doc.save2delicous',oCallback);
            YUE.stopEvent(oEvent);
            return false;
        });
        //type-content
        YUE.on(dContentForm,'submit',function(oEvent){
            var oCallback = {
                success:function(oResponse){
                    var oData = eval('({' + oResponse.responseText + '})');
                    if(oData.result['@code'] == 'done'){
                        alert('Add a document to base sucessfully.');
                        location.reload();
                    };
                },
                failure:function(oResponse){
                    alert(oResponse.statusText);
                }
            };
            YUC.setForm(dContentForm);
            YUC.asyncRequest('POST',YPC.RestUrl + '?method=doc.saveContent',oCallback);
            YUE.stopEvent(oEvent);
            return false;
        });

        //type-upload
        var dUpload = dSection[2];
        var oUploadStep = new F2E.Widget.Step(dUpload);
        oUploadStep.hasControl = false;
        oUploadStep.addStep(dUpload.getElementsByTagName('fieldset'));
        oUploadStep.render();
        var dUploadForm = dUpload.getElementsByTagName('form')[0];
        YUE.on(dUploadForm.elements['upload'],'click',function(oEvent){
            var oCallback = {
                upload:function(oResponse){
                    var oData = eval('(' + oResponse.responseText.replace(/<pre>/ig, '').replace(/<\/pre>/ig, '') + ')');
                    dUploadForm.description.value = oData.description;
                    dUploadForm.note.value = oData.note;
                    dUploadForm.tag.value = oData.tag;
                    dUploadForm.url.value = oData.url;
                    oUploadStep.next();
                }
            };
            YUC.setForm(dUploadForm,true);
            YUC.asyncRequest('POST',YPC.RestUrl + '?method=doc.upload',oCallback);
        });
        YUE.on(dUploadForm,'submit',function(oEvent){
            var oCallback = {
                success:function(oResponse){
                    var oData = eval('({' + oResponse.responseText + '})');
                    if(oData.result['@code'] == 'done'){
                        alert('Add a document to base sucessfully.');
                        location.reload();
                    };
                },
                failure:function(oResponse){
                    alert(oResponse.statusText);
                }
            };
            YUC.setForm(this);
            YUC.asyncRequest('POST',YPC.RestUrl + '?method=doc.save2delicous',oCallback);
            YUE.stopEvent(oEvent);
            return false;
        });
		YUD.setStyle(dModule,'display','none');
	},
    Listing:function(sModuleId){
        var dModule = document.getElementById(sModuleId);
		var dBody = YUD.getElementsByClassName('bd','div',dModule)[0];
        var dForm = dModule.getElementsByTagName('form')[0];
        var dList = YUD.getElementsByClassName('list','ul',dModule)[0];
        var fCallback = function() {
			YUD.removeClass(dBody,'loading');
            var oData = eval('Delicious.posts');
			if(typeof(oData)!='object'){return;}
            dList.innerHTML = '';
            for(var i=0,j=oData.length;i<j;i++){
				try {
	                var dLi = document.createElement('li');				
					var sUrl = 'http://del.icio.us/post?v=4;url=' + encodeURIComponent(oData[i].u) + ';title=' + encodeURIComponent(oData[i].d);
					var aBuffer = [
						'<div class="cell">',
							'<div class="other">',
								'<span class="number">' + (i+1).toString() + '</span>',
								'<a href="#" onclick="openDialog(\'' + oData[i].u +'\',\'' + oData[i].d + '\');return false;" class="guestbook-link"><span>留言</span></a>',						
							'</div>',
							'<h4>',
								'<a href="' + oData[i].u + '">' + F2E.Util.String.setBreak(oData[i].d) + '</a>',
								'<a title="在新視窗開啟連結" href="' + oData[i].u + '" target="_blank" class="new"><img src="' + YPC.ImagePath + 'ico_window.gif" width="20" height="12"/></a>',
								'<a title="將此聯結存到我的 del.icio.us" href="#" onclick="window.open(\'' + sUrl + '\',\'\',\'height=600,width=800,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no\');window.returnValue=false;" class="save">',
									'<img src="' + YPC.ImagePath + 'ico_favorite.gif" width="17" height="16" />',
								'</a>',
							'</h4>',
						];					
					aBuffer.push('<div class="tag">')
	                var aTags = oData[i].t.toString().split(',');
	                for(var x=0,y=aTags.length;x<y;x++){
						aBuffer.push('<a href="?tag=' + aTags[x] + '">' + aTags[x] + '</a>');
					};
					aBuffer.push('</div>');
				}
				catch(e){}
				if(typeof(oData[i].n) != 'undefined'){
					aBuffer.push('<p>' + oData[i].n + '</p>');
				};
				aBuffer.push('</div>');
				dLi.innerHTML = aBuffer.join('');
                dList.appendChild(dLi);				
            };
			YUD.getElementsByClassName('info','div',oTagSelectedModule.module)[0].innerHTML ='（共有<em>' + oData.length + '</em>筆資料）';
        };
        var sRequestUrl = 'http://del.icio.us/feeds/json/josephjiang/' + dForm.elements['tag'].value + '/?count=100';
		try {
			F2E.Util.Library.loadJS(fCallback,sRequestUrl);				
		}
		catch(e) {
			alert(e.message)
		}
    },
	Tag:function(sModuleId){
		var dModule = document.getElementById(sModuleId);
		var dBody = YUD.getElementsByClassName('bd','div',dModule)[0];
		var dForm = dModule.getElementsByTagName('form')[0];
		var dTable = dModule.getElementsByTagName('table')[0]
		var dTbody = dTable.getElementsByTagName('tbody')[0];
		this.module = dModule;		
		var oCallback = {
			success:function(e){				
				YUD.removeClass(dBody,'loading');	
				YUD.setStyle(dTable,'display','block');		
				var oData = eval('(' + e.responseText + ')');
				var aTag = oData.tags.tag;				
				for(var i=0,j=aTag.length;i<j;i++){
					var dTr = dTbody.insertRow(-1);
					var bExist = false
					for(var x=0,y=oTagSelectedModule.tags.length;x<y;x++){
						if(oTagSelectedModule.tags[x] == aTag[i]['@tag']){
							bExist = true;
							break;
						}
					};
					if(bExist){
						dTr.insertCell(-1).innerHTML = '<input type="checkbox" name="tag" value="' + aTag[i]['@tag'] + '" checked />';					
						dTr.style.backgroundColor = '#ffc';
					}
					else {
						dTr.insertCell(-1).innerHTML = '<input type="checkbox" name="tag" value="' + aTag[i]['@tag'] + '" />';										
					}
					var dCell = dTr.insertCell(-1);
					dCell.setAttribute('value',aTag[i]['@tag']);
					dCell.innerHTML = '<a href="?tag=' + aTag[i]['@tag'] + '">' + aTag[i]['@tag'] + '</a>';					
					var dTagCell = dTr.insertCell(-1);
					YUD.addClass(dTagCell,'qty');
					dTagCell.innerHTML = aTag[i]['@count'];
					dTagCell.setAttribute('value',aTag[i]['@count']);	
				};							
				var dInputs = dTbody.getElementsByTagName('input')
				
				YUE.on(dInputs,'click',function(oEvent){
					var aTags=[];
					for(var i=0,j=dInputs.length;i<j;i++){
						if(dInputs[i].checked){
							aTags.push(dInputs[i].value);
						};							
					};
					if(aTags.length!=0){
						location.href = '?tag=' + encodeURIComponent(aTags.join(','));
					}
					else {
						location.href = 'index.html';
					}
				});
				
				var oTable = new YAHOO.TW.F2E.Widget.TableSorting(dTable,{'sDirection':'desc'});
				oTable.addSortingColumn(2,'int',true);
				oTable.addSortingColumn(1);
				oTable.render();				
			}
		};
		YUC.asyncRequest('GET',YPC.RestUrl + '?method=doc.getAllTag',oCallback);		
	},
	TagSelected:function(sModuleId){
		this.module = dModule;
		this.tags = [];
		var dModule = document.getElementById(sModuleId);
		var dLinks = dModule.getElementsByTagName('a');
		for(var i=0,j=dLinks.length;i<j;i++){
			this.tags.push(dLinks[i].innerHTML);	
		};
	},
	MastHead:function(sModuleId){
		var oComponent = this;
		var dModule = document.getElementById(sModuleId);
		var dAddLink = YUD.getElementsByClassName('addlink','a',dModule)[0];
		var dLoginLink = YUD.getElementsByClassName('loginlink','a',dModule)[0];
		var onAddLinkClick = function(oEvent){
			YUD.setStyle(document.getElementById('post'),'display','block');
			YUD.setStyle(this,'display','none');
			YUE.stopEvent(oEvent);
			return false;
		};
		var onLoginLinkClick = function(oEvent){
		
			YUE.stopEvent(oEvent);
			return false;
		};
		YUE.on(dAddLink,'click',onAddLinkClick);
		YUE.on(dLoginLink,'click',onLoginLinkClick);
	}
};
var oTagSelectedModule = new YPC.Module.TagSelected('tag-selected')
var oListModule = new YPC.Module.Listing('prototype-list');
var oTagModule = new YPC.Module.Tag('tag-list');
var oMastModule = new YPC.Module.MastHead('masthead');
F2E.Util.Form.setLabel(document.body); 



