/*
Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/

(function(){function a(n,o){if(CKEDITOR.env.ie)n.removeAttribute(o);else delete n[o];};var b=/^(?:td|th)$/;function c(n){var o=n.createBookmarks(),p=n.getRanges(),q=[],r={};function s(A){if(q.length>0)return;if(A.type==CKEDITOR.NODE_ELEMENT&&b.test(A.getName())&&!A.getCustomData('selected_cell')){CKEDITOR.dom.element.setMarker(r,A,'selected_cell',true);q.push(A);}};for(var t=0;t<p.length;t++){var u=p[t];if(u.collapsed){var v=u.getCommonAncestor(),w=v.getAscendant('td',true)||v.getAscendant('th',true);if(w)q.push(w);}else{var x=new CKEDITOR.dom.walker(u),y;x.guard=s;while(y=x.next()){var z=y.getParent();if(z&&b.test(z.getName())&&!z.getCustomData('selected_cell')){CKEDITOR.dom.element.setMarker(r,z,'selected_cell',true);q.push(z);}}}}CKEDITOR.dom.element.clearAllMarkers(r);n.selectBookmarks(o);return q;};function d(n){var o=new CKEDITOR.dom.element(n),p=(o.getName()=='table'?n:o.getAscendant('table')).$,q=p.rows,r=-1,s=[];for(var t=0;t<q.length;t++){r++;if(!s[r])s[r]=[];var u=-1;for(var v=0;v<q[t].cells.length;v++){var w=q[t].cells[v];u++;while(s[r][u])u++;var x=isNaN(w.colSpan)?1:w.colSpan,y=isNaN(w.rowSpan)?1:w.rowSpan;for(var z=0;z<y;z++){if(!s[r+z])s[r+z]=[];for(var A=0;A<x;A++)s[r+z][u+A]=q[t].cells[v];}u+=x-1;}}return s;};function e(n,o){var p=CKEDITOR.env.ie?'_cke_rowspan':'rowSpan';for(var q=0;q<n.length;q++)for(var r=0;r<n[q].length;r++){var s=n[q][r];if(s.parentNode)s.parentNode.removeChild(s);s.colSpan=s[p]=1;}var t=0;for(q=0;q<n.length;q++)for(r=0;r<n[q].length;r++){s=n[q][r];if(!s)continue;if(r>t)t=r;if(s._cke_colScanned)continue;if(n[q][r-1]==s)s.colSpan++;if(n[q][r+1]!=s)s._cke_colScanned=1;}for(q=0;q<=t;q++)for(r=0;r<n.length;r++){if(!n[r])continue;s=n[r][q];if(!s||s._cke_rowScanned)continue;if(n[r-1]&&n[r-1][q]==s)s[p]++;if(!n[r+1]||n[r+1][q]!=s)s._cke_rowScanned=1;}for(q=0;q<n.length;q++)for(r=0;r<n[q].length;r++){s=n[q][r];a(s,'_cke_colScanned');a(s,'_cke_rowScanned');}for(q=0;q<n.length;q++){var u=o.ownerDocument.createElement('tr');for(r=0;r<n[q].length;){s=n[q][r];if(n[q-1]&&n[q-1][r]==s){r+=s.colSpan;continue;}u.appendChild(s);if(p!='rowSpan'){s.rowSpan=s[p];s.removeAttribute(p);}r+=s.colSpan;if(s.colSpan==1)s.removeAttribute('colSpan');if(s.rowSpan==1)s.removeAttribute('rowSpan');}if(CKEDITOR.env.ie)o.rows[q].replaceNode(u);else{var v=new CKEDITOR.dom.element(o.rows[q]),w=new CKEDITOR.dom.element(u);v.setHtml('');w.moveChildren(v);}}};function f(n){var o=n.cells;for(var p=0;p<o.length;p++){o[p].innerHTML='';if(!CKEDITOR.env.ie)new CKEDITOR.dom.element(o[p]).appendBogus();
}};function g(n,o){var p=n.getStartElement().getAscendant('tr');if(!p)return;var q=p.clone(true);q.insertBefore(p);f(o?q.$:p.$);};function h(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n),p=[];for(var q=0;q<o.length;q++){var r=o[q].getParent();p[r.$.rowIndex]=r;}for(q=p.length;q>=0;q--)if(p[q])h(p[q]);}else if(n instanceof CKEDITOR.dom.element){var s=n.getAscendant('table');if(s.$.rows.length==1)s.remove();else n.remove();}};function i(n,o){var p=n.getStartElement(),q=p.getAscendant('td',true)||p.getAscendant('th',true);if(!q)return;var r=q.getAscendant('table'),s=q.$.cellIndex;for(var t=0;t<r.$.rows.length;t++){var u=r.$.rows[t];if(u.cells.length<s+1)continue;q=new CKEDITOR.dom.element(u.cells[s].cloneNode(false));if(!CKEDITOR.env.ie)q.appendBogus();var v=new CKEDITOR.dom.element(u.cells[s]);if(o)q.insertBefore(v);else q.insertAfter(v);}};function j(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n);for(var p=o.length;p>=0;p--)if(o[p])j(o[p]);}else if(n instanceof CKEDITOR.dom.element){var q=n.getAscendant('table'),r=n.$.cellIndex;for(p=q.$.rows.length-1;p>=0;p--){var s=new CKEDITOR.dom.element(q.$.rows[p]);if(!r&&s.$.cells.length==1){h(s);continue;}if(s.$.cells[r])s.$.removeChild(s.$.cells[r]);}}};function k(n,o){var p=n.getStartElement(),q=p.getAscendant('td',true)||p.getAscendant('th',true);if(!q)return;var r=q.clone();if(!CKEDITOR.env.ie)r.appendBogus();if(o)r.insertBefore(q);else r.insertAfter(q);};function l(n){if(n instanceof CKEDITOR.dom.selection){var o=c(n);for(var p=o.length-1;p>=0;p--)l(o[p]);}else if(n instanceof CKEDITOR.dom.element)if(n.getParent().getChildCount()==1)n.getParent().remove();else n.remove();};var m={thead:1,tbody:1,tfoot:1,td:1,tr:1,th:1};CKEDITOR.plugins.tabletools={init:function(n){var o=n.lang.table;n.addCommand('cellProperties',new CKEDITOR.dialogCommand('cellProperties'));CKEDITOR.dialog.add('cellProperties',this.path+'dialogs/tableCell.js');n.addCommand('tableDelete',{exec:function(p){var q=p.getSelection(),r=q&&q.getStartElement(),s=r&&r.getAscendant('table',true);if(!s)return;q.selectElement(s);var t=q.getRanges()[0];t.collapse();q.selectRanges([t]);if(s.getParent().getChildCount()==1)s.getParent().remove();else s.remove();}});n.addCommand('rowDelete',{exec:function(p){var q=p.getSelection();h(q);}});n.addCommand('rowInsertBefore',{exec:function(p){var q=p.getSelection();g(q,true);}});n.addCommand('rowInsertAfter',{exec:function(p){var q=p.getSelection();g(q);}});n.addCommand('columnDelete',{exec:function(p){var q=p.getSelection();
j(q);}});n.addCommand('columnInsertBefore',{exec:function(p){var q=p.getSelection();i(q,true);}});n.addCommand('columnInsertAfter',{exec:function(p){var q=p.getSelection();i(q);}});n.addCommand('cellDelete',{exec:function(p){var q=p.getSelection();l(q);}});n.addCommand('cellInsertBefore',{exec:function(p){var q=p.getSelection();k(q,true);}});n.addCommand('cellInsertAfter',{exec:function(p){var q=p.getSelection();k(q);}});if(n.addMenuItems)n.addMenuItems({tablecell:{label:o.cell.menu,group:'tablecell',order:1,getItems:function(){var p=c(n.getSelection());return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_properties:p.length>0?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};}},tablecell_insertBefore:{label:o.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:o.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:o.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_properties:{label:o.cell.title,group:'tablecellproperties',command:'cellProperties',order:20},tablerow:{label:o.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF};}},tablerow_insertBefore:{label:o.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:o.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:o.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:o.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF};}},tablecolumn_insertBefore:{label:o.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:o.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:o.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(n.contextMenu)n.contextMenu.addListener(function(p,q){if(!p)return null;while(p){if(p.getName() in m)return{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF};p=p.getParent();}return null;});},getSelectedCells:c};CKEDITOR.plugins.add('tabletools',CKEDITOR.plugins.tabletools);
})();
