]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - jssource/src_files/themes/Sugar5/js/style.js
Release 6.2.0
[Github/sugarcrm.git] / jssource / src_files / themes / Sugar5 / js / style.js
1 /*********************************************************************************
2  * SugarCRM Community Edition is a customer relationship management program developed by
3  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by the
7  * Free Software Foundation with the addition of the following permission added
8  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
9  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
10  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License along with
18  * this program; if not, see http://www.gnu.org/licenses or write to the Free
19  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20  * 02110-1301 USA.
21  * 
22  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
23  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
30  * these Appropriate Legal Notices must retain the display of the "Powered by
31  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
32  * technical reasons, the Appropriate Legal Notices must display the words
33  * "Powered by SugarCRM".
34  ********************************************************************************/
35
36  
37
38
39 /**
40  * Handles loading the sitemap popup
41  */
42 YAHOO.util.Event.onAvailable('sitemapLinkSpan',function()
43 {
44     document.getElementById('sitemapLinkSpan').onclick = function()
45     {
46         ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING_PAGE'));
47     
48         var smMarkup = '';
49         var callback = {
50              success:function(r) {     
51                  ajaxStatus.hideStatus();
52                  document.getElementById('sm_holder').innerHTML = r.responseText;
53                  with ( document.getElementById('sitemap').style ) {
54                      display = "block";
55                      position = "absolute";
56                      right = 0;
57                      top = 80;
58                  }
59                  document.getElementById('sitemapClose').onclick = function()
60                  {
61                      document.getElementById('sitemap').style.display = "none";
62                  }
63              } 
64         } 
65         postData = 'module=Home&action=sitemap&GetSiteMap=now&sugar_body_only=true';    
66         YAHOO.util.Connect.asyncRequest('POST', 'index.php', callback, postData);
67     }
68 });
69
70 /**
71  * Handles changing the sub menu items when using grouptabs
72  */
73 YAHOO.util.Event.onAvailable('subModuleList',IKEADEBUG);
74 function IKEADEBUG()
75 {
76     var moduleLinks = document.getElementById('moduleList').getElementsByTagName("a");
77     moduleLinkMouseOver = function() 
78         {
79             var matches      = /grouptab_([0-9]+)/i.exec(this.id);
80             var tabNum       = matches[1];
81             var moduleGroups = document.getElementById('subModuleList').getElementsByTagName("span"); 
82             for (var i = 0; i < moduleGroups.length; i++) { 
83                 if ( i == tabNum ) {
84                     moduleGroups[i].className = 'selected';
85                 }
86                 else {
87                     moduleGroups[i].className = '';
88                 }
89             }
90             
91             var groupList = document.getElementById('moduleList').getElementsByTagName("li");
92                         var currentGroupItem = tabNum;
93             for (var i = 0; i < groupList.length; i++) {
94                 var aElem = groupList[i].getElementsByTagName("a")[0];
95                 if ( aElem == null ) {
96                     // This is the blank <li> tag at the start of some themes, skip it
97                     continue;
98                 }
99                 // notCurrentTabLeft, notCurrentTabRight, notCurrentTab
100                 var classStarter = 'notC';
101                 if ( aElem.id == "grouptab_"+tabNum ) {
102                     // currentTabLeft, currentTabRight, currentTab
103                     classStarter = 'c';
104                                         currentGroupItem = i;
105                 }
106                 var spanTags = groupList[i].getElementsByTagName("span");
107                 for (var ii = 0 ; ii < spanTags.length; ii++ ) {
108                     if ( spanTags[ii].className == null ) { continue; }
109                     var oldClass = spanTags[ii].className.match(/urrentTab.*/);
110                     spanTags[ii].className = classStarter + oldClass;
111                 }
112             }
113             ////////////////////////////////////////////////////////////////////////////////////////
114                         ////update submenu position
115                         //get sub menu dom node
116                         var menuHandle = moduleGroups[tabNum];
117                         
118                         //get group tab dom node
119                         var parentMenu = groupList[currentGroupItem];
120
121                         if(menuHandle && parentMenu){
122                                 updateSubmenuPosition(menuHandle , parentMenu);
123                         }
124                         ////////////////////////////////////////////////////////////////////////////////////////
125         };
126     for (var i = 0; i < moduleLinks.length; i++) {
127         moduleLinks[i].onmouseover = moduleLinkMouseOver;
128     }
129 };
130
131 function updateSubmenuPosition(menuHandle , parentMenu){        
132         var left='';
133         if (left == "") {
134                 p = parentMenu;
135                 var left = 0;
136                 while(p&&p.tagName.toUpperCase()!='BODY'){
137                         left+=p.offsetLeft;
138                         p=p.offsetParent;
139                 }
140         }
141
142         //get browser width
143         var bw = checkBrowserWidth();
144         
145         //If the mouse over on 'MoreMenu' group tab, stop the following function
146         if(!parentMenu){
147                 return;
148         }
149         //Calculate left position of the middle of current group tab .
150         var groupTabLeft = left + (parentMenu.offsetWidth / 2);
151         var subTabHalfLength = 0;
152         var children = menuHandle.getElementsByTagName('li');
153         for(var i = 0; i< children.length; i++){
154                 //offsetWidth = width + padding + border
155                 if(children[i].className == 'subTabMore' || children[i].parentNode.className == 'cssmenu'){
156                         continue;
157                 }
158                 subTabHalfLength += parseInt(children[i].offsetWidth);
159         }
160         
161         if(subTabHalfLength != 0){
162                 subTabHalfLength = subTabHalfLength / 2;
163         }
164         
165         var totalLengthInTheory = subTabHalfLength + groupTabLeft;
166         if(subTabHalfLength>0 && groupTabLeft >0){
167                 if(subTabHalfLength >= groupTabLeft){
168                         left = 1;
169                 }else{
170                         left = groupTabLeft - subTabHalfLength;
171                 }
172         }
173         
174         //If the sub menu length > browser length
175         if(totalLengthInTheory > bw){
176                 var differ = totalLengthInTheory - bw;
177                 left = groupTabLeft - subTabHalfLength - differ - 2;
178         }
179         
180         if (left >=0){
181                 menuHandle.style.marginLeft = left+'px';
182         }
183 }
184
185 YAHOO.util.Event.onDOMReady(function()
186 {
187         if ( document.getElementById('subModuleList') ) {
188             ////////////////////////////////////////////////////////////////////////////////////////
189         ////update current submenu position
190         var parentMenu = false;
191         var moduleListDom = document.getElementById('moduleList');
192         if(moduleListDom !=null){
193             var parentTabLis = moduleListDom.getElementsByTagName("li");
194             var tabNum = 0;
195             for(var ii = 0; ii < parentTabLis.length; ii++){
196                 var spans = parentTabLis[ii].getElementsByTagName("span");
197                 for(var jj =0; jj < spans.length; jj++){
198                     if(spans[jj].className.match(/currentTab.*/)){
199                         tabNum = ii;
200                     }
201                 }
202             }
203             var parentMenu = parentTabLis[tabNum];
204         }
205         var moduleGroups = document.getElementById('subModuleList').getElementsByTagName("span"); 
206         for(var i = 0; i < moduleGroups.length; i++){
207             if(moduleGroups[i].className.match(/selected/)){
208                 tabNum = i;
209             }
210         }
211         var menuHandle = moduleGroups[tabNum];
212         
213         if(menuHandle && parentMenu){
214             updateSubmenuPosition(menuHandle , parentMenu);
215         }
216     }
217         ////////////////////////////////////////////////////////////////////////////////////////
218 });