/*
 * hipic.web.app
 * Copyright(c) 2010, FeiKan.
 * 
 * This code is licensed under BSD license. Use it as you wish, 
 * but keep this copyright intact.
 */


$(function()
{app.ui.album={image:function(options)
{var _instance;var _opts=options||{};var _el=_opts.el;var _id=_opts.id||GUID();var _aid=_opts.aid||0;var _size=_opts.size||0;var _extension=_opts.extension||'';var _imgwidth=_opts.imgwidth||'';var _imgheight=_opts.imgheight||'';var _iskey=_opts.iskey||false;var _valid=_opts.valid||false;var _isRecycle=_opts.recycle||false;var _isSaved=_opts.saved===undefined?true:_opts.saved||false;var _ddopt=_opts.ddopt;var _dd;var _url,_thumb;var _img,_title,_bZoomin,_bKey,_bRecycle,_bRestore;var _currButton;var _isDraging=false;var _init=function()
{if(_img||_title||_bZoomin||_bKey||_bRecycle||_bRestore)
{_destroy();}
if(!_el)
{_el=$('<li />');}
_img=_el.children('img');_title=_el.children('h2');_bZoomin=_el.children('.ui-icon-zoomin');_bKey=_el.children('.ui-icon-flag');_bRecycle=_el.children('.ui-icon-trash');_bRestore=_el.children('.ui-icon-refresh');if(!_title[0])
{_title=$('<h2>{0}</h2>'.toString(_id)).prependTo(_el);}
if(!_img[0]||!_title.next().length||_title.next()[0].nodeName.toLowerCase()!=='img')
{_img=$('<img src="{0}" id="{1}" />'.toString(_getFilePath(true),_id)).insertAfter(_title);_img.load(_updateImage);}
if(!_bRestore[0]||!_img.next().length||!_img.next().hasClass('ui-icon-refresh'))
{_bRestore=$('<a class="ui-icon ui-icon-refresh" href=""></a>').insertAfter(_img);}
if(!_bRecycle[0]||!_bRestore.next().length||!_bRestore.next().hasClass('ui-icon-trash'))
{_bRecycle=$('<a class="ui-icon ui-icon-trash" href=""></a>').insertAfter(_bRestore);}
if(!_bZoomin[0]||!_bRecycle.next().length||!_bRecycle.next().hasClass('ui-icon-zoomin'))
{_bZoomin=$('<a class="ui-icon ui-icon-zoomin" href=""></a>').insertAfter(_bRecycle);}
if(!_bKey[0]||!_bZoomin.next().length||!_bZoomin.next().hasClass('ui-icon-flag'))
{_bKey=$('<a class="ui-icon ui-icon-flag" href=""></a>').insertAfter(_bZoomin);}
_bKey.nextAll().empty();_update();if(!$.browser.msie)
{_img.css('cursor','move');}
_bZoomin.bind('mouseover',_onButtonHover);_bKey.bind('mouseover',_onButtonHover);_bRecycle.bind('mouseover',_onButtonHover);_bRestore.bind('mouseover',_onButtonHover);_el.bind('click',_onClick).bind('mouseover',{'hover':true},_onHighlight).bind('mouseout',_onHighlight);if(_iskey)
{_setkey(true);}
if(_ddopt)
{_dd=_el.dragdrop($.extend(_ddopt,{'tag':_instance}));}};var _onButtonHover=function(e)
{if(e.target==_bZoomin[0])
{_currButton=_bZoomin;}
else if(e.target==_bKey[0])
{_currButton=_bKey;}
else if(e.target==_bRecycle[0])
{_currButton=_bRecycle;}
else if(e.target==_bRestore[0])
{_currButton=_bRestore;}};var _onClick=function(e)
{if(_currButton)
{if(_currButton.is('a.ui-icon-trash'))
{_recycle();_el.trigger(E['ui-album-explorer-recycle'],[_instance]);}
else if(_currButton.is('a.ui-icon-zoomin'))
{_el.trigger(E['ui-album-explorer-zoomin'],[_instance]);}
else if(_currButton.is('a.ui-icon-refresh'))
{_restore();_el.trigger(E['ui-album-explorer-restore'],[_instance]);}
else if(_currButton.is('a.ui-icon-flag'))
{_setkey(!_iskey);_el.trigger(E['ui-album-explorer-setkey'],[_instance]);}}
return false;};var _onHighlight=function(e)
{if(e.data&&e.data.hover)
{_el.addClass('ui-highlight');}
else
{_el.removeClass('ui-highlight');}};var _update=function()
{_updateImage();_updateButton();};var _updateImage=function()
{_img.hide();setTimeout(function()
{var w=_img.width();var h=_img.height();if(w&&h)
{var size=_isRecycle?OP['ui-album-image-recycle-size']:OP['ui-album-image-thumb-size'];h*=size[0]/w;w=size[0];if(w>size[0])
{h*=size[0]/w;w=size[0];}
if(h>size[1])
{w*=size[1]/h;h=size[1];}}
_img.css({'display':''});if(w&&h)
{_img.css({'width':w+'px','height':h+'px'});}},200);};var _updateButton=function()
{if(_isRecycle)
{_bKey.hide();_bRecycle.hide();_bRestore.show();}
else
{_bKey.show();_bRecycle.show();_bRestore.hide();}};var _setkey=function(val)
{_iskey=val;if(_iskey)
{_el.addClass('ui-key');}
else
{_el.removeClass('ui-key');}};var _recycle=function()
{_isRecycle=true;_update();};var _restore=function()
{_isRecycle=false;_update();};var _destroy=function()
{_el.unbind('click').unbind('mouseover').unbind('mouseout');};var _getFilePath=function(thumb)
{if(!_valid)
{return OP['ui-album-image-unknow'];}
else
{return'{0}{1}{2}{3}'.toString(OP['ui-album-image-directory'],_id,thumb?'_thumb':'',_extension);}}
return{dd:function()
{return _dd;},apply:function()
{_instance=this;_init();this.update();return this;},update:function()
{_update();return this;},valid:function()
{return _valid;},el:function()
{return _el;},id:function(val)
{if(val===undefined)
{return _id;}
else
{_id=val;return this;}},iskey:function(val)
{if(val===undefined)
{return _iskey;}
else
{_setkey(val&&true);return this;}},size:function(val)
{if(val===undefined)
{return _size;}
else
{_size=val;return this;}},extension:function(val)
{if(val===undefined)
{return _extension;}
else
{_extension=val;return this;}},img:function()
{return _img;},recycle:function()
{_recycle();},restore:function()
{_restore();},destroy:function()
{_destroy();return this;},isRecycle:function()
{return _isRecycle;},isSaved:function(val)
{if(val===undefined)
{return _isSaved;}
else
{_isSaved=val;return this;}},dump:function()
{return{'id':_id};}}},explorer:function(options)
{var _opts=options||{};var _el=_opts.el;var _explorer,_header,_list,_trash;var _dds,_images=[],_changeImages;var _selectedImage;var _toolbar;var _loading;var _init=function()
{_dds=[];if(_el&&_el[0])
{_parseHtml();}
else
{_create();}
_changeImages=[];};var _create=function()
{_el=$('<div class="ui-album" id="picexplorer"></div>');_explorer=$('<table class="ui-album-explorer"><tbody><tr><td class="ui-album-list"></td><td class="ui-album-recycle"></td></tr></tbody></table>').appendTo(_el);_header=$('<thead><tr><td colspan="2"></td></tr></thead>').appendTo(_explorer).find('td');_list=$('<ul></ul>').appendTo(_explorer);_trash=$('<div><h2><em class="ui-icon ui-icon-trash"></em>待删除</h2><ul></ul></div>').appendTo(_explorer).find('ul');if(_images.length)
{$.each(_images,function()
{var img=_createImage(this.id,this.aid,this.width,this.height,this.size,this.iskey,this.extension);if(this.recycle)
{img.recycle();}});}};var _parseHtml=function()
{if(_images&&_images.length)
{_destroy();}
_explorer=_el.find('.ui-album-explorer');_header=_explorer.find('thead td');_list=_explorer.find('.ui-album-list ul');_trash=_explorer.find('.ui-album-recycle ul');if(!_explorer[0]||!_list[0]||!_trash[0])
{_explorer=null;_list=null;_trash=null;return;}
else
{var el;_list.children().each(function()
{el=$(this);var prop=el.attr('hi:opt');if(prop)
{var ps=prop.split(';');var ops={};for(var i=0;i<ps.length;i++)
{var p=ps[i].split[':'];ops[p[0]]=p[1];p=null;}
_createImage(ops['id'],ops['aid'],ops['width'],ops['height'],ops['size'],ops['iskey'],ops['extension'],el);prop=null;ps=null;}});_trash.children().each(function()
{el=$(this);var prop=el.attr('hi:opt');if(prop)
{var ps=prop.split(';');var ops={};for(var i=0;i<ps.length;i++)
{var p=ps[i].split[':'];ops[p[0]]=p[1];p=null;}
var img=_createImage(ops['id'],ops['aid'],ops['width'],ops['height'],ops['size'],ops['iskey'],ops['extension'],el);img.recycle();prop=null;ps=null;img=null;}});}};var _createImage=function(id,aid,width,height,size,iskey,extension,valid,el)
{var op={'id':id,'aid':aid,'imgwidth':width,'imgheight':height,'size':size,'extension':extension,'iskey':iskey,'valid':valid,'ddopt':{'regionToParent':true,' accept':[_list,_trash],' distance':10}};var img=new app.ui.album.image(op).apply();_images.push(img);img.el().bind(E['app-dragdrop-mouse-begin'],_onImageBeginDrag).bind(E['app-dragdrop-mouse-end'],_onImageEndDrag).bind(E['ui-album-explorer-recycle'],_onImageRecycle).bind(E['ui-album-explorer-restore'],_onImageRestore).bind(E['ui-album-explorer-zoomin'],_onImageZoomin).bind(E['ui-album-explorer-setkey'],_onImageSetkey).appendTo(_list);_dds[id]=img.dd();return img;};var _onImageBeginDrag=function(e,img)
{};var _onImageEndDrag=function(e,img,target)
{if(target==_list[0])
{img.restore();}
else if(target==_trash[0])
{img.recycle();}};var _onImageRecycle=function(e,img)
{img.el().css('opacity',0).detach().appendTo(_trash).animate({'opacity':1}).removeClass('ui-highlight');_setChange(img);};var _onImageRestore=function(e,img)
{img.el().css('opacity',0).detach().appendTo(_list).animate({'opacity':1}).removeClass('ui-highlight');_setChange(img);};var _onImageZoomin=function(e,img)
{};var _onImageSetkey=function(e,img)
{_setChange(img);};var _destroy=function()
{if(_images.length)
{var img=_images.shift();while(img)
{img.el().unbind(E['ui-album-explorer-recycle']).unbind(E['ui-album-explorer-restore']).unbind(E['ui-album-explorer-zoomin']).unbind(E['ui-album-explorer-setkey']);img.destroy();if(_images.length)
{img=_images.shift();}
else
{img=null;}};_list.empty();_trash.empty();}
$.each(_dds,function(i,j)
{j.destroy();});_el.trigger(E['ui-album-explorer-clear']);};var _setChange=function(img)
{if(_changeImages&&$.inArray(img,_changeImages)<0)
{_changeImages.push(img);_el.trigger(E['ui-album-explorer-change']);}};_init();return{el:function()
{return _el;},elHeader:function()
{return _header;},elList:function()
{return _list;},elTrash:function()
{return _trash;},invalid:function()
{$.each(_images,function()
{this.update();});},create:function(id,aid,width,height,size,iskey,extension,valid)
{var img=_createImage(id,aid,width,height,size,iskey,extension,valid);_setChange(img);return img;},ready:function()
{_changeImages=[];return this;},enable:function()
{_el.removeClass('ui-album-explorer-disible');return this;},disible:function()
{_el.addClass('ui-album-explorer-disible');return this;},loading:function(visible)
{if(visible!==undefined)
{if(visible)
{if(!_loading)
{_loading=new UI_LOADING(_list,2);_loading.show();}
else
{_loading.center();}}
else
{_loading.hide();_loading=null;}}
else
{return _loading&&true;}},hasChange:function()
{return _changeImages.length&&true;},clear:function()
{_destroy();},val:function(v)
{if(v!==undefined)
{if(v)
{_changeImages=[];_destroy();var imgs;var d=OP['ui-album-image-directory'];var scope=this;$.each(v,function(i,j)
{_createImage(j.id,j.aid,j.width,j.height,j.size,j.iskey,j.extension,true);});}
else
{this.clear();}}},getChange:function(isRecycle,isValid)
{var idx=-1;$.each(_changeImages,function(i)
{if(isRecycle!==undefined&&this.isRecycle()!==isRecycle)
{return true;}
if(isValid!==undefined&&this.valid()!==isValid)
{return true;}
idx=i;return false;});if(idx>=0)
{return _changeImages.splice(idx,1);}},removeChange:function(id)
{if(_changeImages&&_changeImages.length&&id)
{var idx=-1;for(var i=0;i<_changeImages.length;i++)
{var img=_changeImages[i];if(img.id()===id)
{idx=i;break;}}
if(idx>=0)
{_changeImages.splice(rid,1);}}},unsaveImages:function()
{return _changeImages;}};},automatic:function()
{var _inited=false;var _imgList=[];var _curr=-1;var _isSlideshowRunning=true;var _wnd=null;var _timer=null;var _windowSize=[];var _container,_imgPane,_toolsPane,_toolBg;var _img,_loading;var _tNum,_tControl,_bPrev,_bPause,_bNext;var _onWindowResize=function()
{return;var w=Math.max(BODY.width(),$('#pager').width());var h=$.browser.opera?BODY.clientHeight:DOCEL.clientHeight;if(w>100)
{w-=100;}
if(h>100)
{h-=100;}
_windowSize=[w,h]
_wnd.sizeto(w,h);_container.css({'width':_wnd.el().width()+'px','height':_wnd.el().height()-20+'px'});_imgPane.css({'width':_wnd.el().width()-40+'px'});_loading.css({'left':(_imgPane.width()-126)/2+'px','top':(_imgPane.height()-22)/2+'px'});};var _onWindowClose=function()
{_wnd=null;};var _onToolMouseover=function()
{var t=$(this);if($.browser.msie)
{t.css('background-position-y','-55px');}
else
{var c=t.attr('class');t.addClass(c+'2').removeClass(c);}};var _onToolMouseout=function()
{var t=$(this);if($.browser.msie)
{t.css('background-position-y','0');}
else
{var c=t.attr('class').replace(/\d/g,'');t.addClass(c).removeClass(c+'2');}};var _onImageLoad=function()
{var size=[_img.width(),_img.height()];var ww=Math.max(BODY.width(),$('#pager').width());var wh=$.browser.opera?BODY.clientHeight:DOCEL.clientHeight;if(size[0]>ww)
{size[1]*=ww/size[0];size[0]=ww;}
if(size[1]>wh)
{size[0]*=wh/size[1];size[1]=wh;}
size[0]-=40;size[1]-=40;_img.css({'width':size[0]+'px','height':size[1]+'px'}).show();_imgPane.css({'width':size[0]+'px','height':size[1]+'px'}).show();var t=size[1]-120;if(t<0)
{t=0;}
_toolsPane.css({'top':t+'px'});_toolBg.css({'top':t+'px'});_wnd.sizeto(size[0]+40,size[1]+20);}
var _ontoolsgoto=function(e)
{if(_timer)
{clearTimeout(_timer);}
_gotoIndex(_curr+e.data.step);};var _onpause=function()
{_isSlideshowRunning=!_isSlideshowRunning;if(_isSlideshowRunning)
{_bPause.addClass('ui-album-tools-control-pause2').removeClass('ui-album-tools-control-play ui-album-tools-control-play2');_onelapse();}
else
{_bPause.addClass('ui-album-tools-control-play2').removeClass('ui-album-tools-control-pause ui-album-tools-control-pause2');}};var _onelapse=function()
{if(_isSlideshowRunning)
{setTimeout(function(){_bNext.trigger('click',{'step':1});},_inited?OP['ui-slide-autorun-interval']:10);}};var _openWindow=function()
{if(!_wnd)
{_wnd=new UI_WIN(400);_wnd.footVisable(false);_wnd.bind('close',_onWindowClose);_container=$('<div class="ui-album-automatic"></div>');_imgPane=$('<div class="ui-album-pane"><div class="ui-album-loading"></div></div>').appendTo(_container);_loading=_imgPane.children('.ui-album-loading').hide();_toolsPane=$('<div class="ui-album-tools-bg"></div><div class="ui-album-tools"></div>').appendTo(_container).eq(1);_tNum=$('<em class="ui-album-tools-num" style="float:left;margin:10px 0 0 20px;color:#fff;font-size:4em;font-weight:bold;">Loading...</em>').appendTo(_toolsPane);_tControl=$('<div class="ui-album-tools-control"></div>').appendTo(_toolsPane);_bPrev=$('<em class="ui-album-tools-control-prev"></em>').appendTo(_tControl).bind('click',{'step':-1},_ontoolsgoto);_bPause=$('<em class="ui-album-tools-control-pause"></em>').appendTo(_tControl).click(_onpause);_bNext=$('<em class="ui-album-tools-control-next"></em>').appendTo(_tControl).bind('click',{'step':1},_ontoolsgoto);_tControl.children('em').mouseover(_onToolMouseover).mouseout(_onToolMouseout);_wnd.el().css('textAlign','center').append(_container);_toolBg=_toolsPane.prev();}
_wnd.show();};var _sizeImage=function()
{var wp=_imgPane.width();var hp=_imgPane.height();var wi=_img.width();var hi=_img.height();var w=wi;var h=hi;if(wi>wp)
{h*=wp/wi;w=wp;}
if(hi>hp)
{w*=hp/hi;h=hp;}
var y=(hp-h)/2;_img.css({'width':w+'px','height':h+'px','margin-top':y+'px'}).fadeIn();};var _updateInfo=function()
{_tNum.text('{0}/{1}'.toString(_curr+1,_imgList.length));};var _gotoIndex=function(index)
{if(_imgList.length>0)
{var idx=index;if(!TYPE.isInteger(index))
{idx=_curr;}
_curr=idx;if(_curr>=_imgList.length)
{_curr=_imgList.length?0:-1;}
else if(_curr<0)
{_curr=_imgList.length?_imgList.length-1:-1;}
if(_curr>=0)
{if(_img)
{_img.unbind('load').remove();}
_updateInfo();setTimeout(function()
{_inited=true;_img=$('<img src="{0}" />'.toString(_imgList[_curr])).prependTo(_imgPane.empty()).one('load',_onImageLoad).hide();if(_isSlideshowRunning)
{_timer=setTimeout(_onelapse,OP['ui-slide-display-interval']);}},500);}}};var _reset=function()
{_curr=-1;_imgList=[];_isSlideshowRunning=false;};var __showLoading=function()
{_loading.css({'left':(_imgPane.width()-64)/2+'px','top':(_imgPane.height()-64)/2+'px'}).show();}
return{show:function(imgIndex)
{if(!_wnd)
{_openWindow();}
_gotoIndex(imgIndex);return this;},appendImage:function(url)
{if(TYPE.isString(url))
{_imgList.push(url);}
return this;},countup:function()
{return _imgList.length;},clear:function()
{_curr=-1;_imgList=[];return this;}}}}
$.extend(window,{UI_ALBUM:app.ui.album.automatic,UI_ALBUM_EXPLORER:app.ui.album.explorer,UI_ALBUM_IMG:app.ui.album.image});});
