home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 October / PCWorld_2006-10_cd.bin / komunikace / icqstatus / icqstatp107b.exe / DATA / 136 < prev    next >
Text File  |  2006-09-05  |  8KB  |  230 lines

  1. // Global veriables --------------------------------------------------------------------------------------------
  2. var gl_row_id = 0;
  3. var gl_num_of_icons = 31
  4. var gl_icons_in_row = 6;
  5. var gl_num_of_text_rows = 5;
  6. var browser = navigator.userAgent.toLowerCase();
  7. if(browser.indexOf("msie 6")!=-1 || browser.indexOf("msie 7")!=-1 || browser.indexOf("msie 8")!=-1) ie6=1; // IE6 Sniffer
  8. else  ie6=0;
  9.  
  10. function init()
  11. {
  12.     var xmlLineData = loadFromClient();        
  13.     if(xmlLineData)
  14.         setToForm(xmlLineData);
  15.     
  16.     document.getElementById('preloader').style.display = "none";
  17.     mainDiv.style.display = "block";
  18.     disableApplyButton(true);    
  19. }
  20.  
  21. function wait(on)
  22. {
  23.     apply_btn.disabled = on
  24.     ok_btn.disabled = on
  25.     if(on)    document.body.style.cursor = "wait";
  26.     else document.body.style.cursor = "auto";    
  27. }
  28.  
  29. // Get the name of the gif icon from the full path---------------------------------------------------------
  30. function getNameFromPath(path){            
  31.     var endPoint = path.indexOf(".gif");
  32.     var startPoint = 0;
  33.     for(j = endPoint; j>0 ; j--){
  34.         if(path.charAt(j) == '/') {
  35.             startPoint = j + 1;                
  36.             return path.substring(startPoint,endPoint);        
  37.         }
  38.     }        
  39. }
  40.  
  41. // Load data from the Client to a temp XML -----------------------------------------------------------------    
  42. function loadFromClient()
  43. {
  44.     var req = "<Q><PluginID>Client</PluginID><SrvID>CASXtraRetrieveData</SrvID><UserID>"+ top.icqConnector.GetIMOwnerData('SCREEN_NAME') +"</UserID></Q>";
  45.     var quer = "<Root><CASXtraRetrieveData></CASXtraRetrieveData></Root>"
  46.     var xmlLineData = false
  47.     try    {xmlLineData = top.icqConnector.NotifyPlugin(req,quer);} // indicates that it was operated befor
  48.     catch(e){;trace(e,"CASXtraRetrieveData");}    
  49.     var xmlDoc = new ActiveXObject("Msxml.DOMDocument");
  50.     xmlDoc.async = false;
  51.     var res = xmlDoc.loadXML(xmlLineData);    
  52.     
  53.     if(!res) return false
  54.  
  55.     try{
  56.         res = xmlDoc.loadXML(xmlDoc.selectSingleNode("//RES").text);
  57.     }
  58.     catch(e){
  59.         //top.trace(e,"loadFromClient")    
  60.         return false
  61.     }
  62.     return xmlDoc
  63. }
  64.  
  65. // inserting data from temp XML to the form --------------------------------------
  66. function setToForm(xmlDoc)
  67. {
  68.     var xmlLineData = xmlDoc.getElementsByTagName("Row");        
  69.     for(var i=0 ; i<xmlLineData.length ; i++)
  70.     {
  71.         try{            
  72.             var lineNum = eval(xmlLineData[i].selectSingleNode("LineNumber").text) -1;
  73.             var iconIndex = eval(xmlLineData[i].selectSingleNode("iconIndex").text) -1;            
  74.             document.frm["c" + lineNum].disabled = false
  75.             if(eval(xmlLineData[i].selectSingleNode("On").text)) 
  76.                 document.frm["c" + lineNum].checked = true;                
  77.             document.frm["i" + lineNum].src = "icons/" + iconIndex + ".gif";
  78.             document.frm["n" + lineNum].value = unescape(xmlLineData[i].selectSingleNode("Name").text);
  79.             document.frm["t" + lineNum].value = unescape(xmlLineData[i].selectSingleNode("Description").text);                
  80.         }
  81.         catch(e){
  82.             top.trace(e,"setToForm")
  83.         }
  84.     }
  85. }
  86.  
  87. // Main (parent) save data function -------------------------------------------------------------------------------------    
  88. function save(saveType)
  89. {
  90.     var lineData = collectCurrentData(); // Collecting the data from the form elements    
  91.     setCurrentStatus(lineData);    // Changing the current state of the status indicator on contact list        
  92.     if(saveType == "ok") top.icqConnector.ClosePluginUISite();
  93. }
  94.  
  95. // Collecting the data from the form elements----------------------------------------------------------------    
  96. function collectCurrentData(){        
  97.     var formElements = new Object(document.frm)
  98.     var results = new Array;
  99.     var row = 0 ;
  100.     
  101.     for ( i = 0; i< formElements.length; i++ ) {// All the inputs in the form                
  102.         if(formElements[i].type=="checkbox")    {// if an input is a checkbox then it's a strat of a row        
  103.             results[row] = new Array;    
  104.             results[row]["on"] = formElements[i].checked; //checked ?
  105.             results[row]["index"] = row+1; // row number
  106.             results[row]["iconIndex"] = getNameFromPath(document.getElementById('i'+row).src); // image number
  107.             results[row]["name"] = formElements[i+1].value; // Name
  108.             results[row]["text"] = formElements[i+2].value; // Away text
  109.             row = row + 1;
  110.         }
  111.     }
  112.     return results;
  113. }
  114.  
  115.  
  116. function addElement(root,tagName,value)
  117. {
  118.     var lXml = top.getXml(false)
  119.     newElemet = lXml.createElement(tagName);
  120.     if(!top.isEmpty(value))
  121.         newElemet.text = value;
  122.     root.appendChild(newElemet);
  123.     return newElemet
  124. }
  125.  
  126. // Changing the current state of the status indicator on contact list -------------------------------------
  127. function setCurrentStatus(data) 
  128. {
  129.     var req = "<Q><PluginID>Client</PluginID><SrvID>CASXtraPrefsSet</SrvID><UserID>"+ top.icqConnector.GetIMOwnerData('SCREEN_NAME') +"</UserID></Q>";
  130.     var quer ="<Root><CASXtraPrefsSet></CASXtraPrefsSet>"; 
  131.     var xmlDoc = top.getXml(false)
  132.     var root = xmlDoc.createElement("Root");
  133.     for(var i=0;i<data.length;i++)
  134.     {
  135.         var ind =  isNaN(data[i]['iconIndex'])? -1:(parseInt(data[i]['iconIndex']) + 1);
  136.         
  137.         if (ind > -1)
  138.         {
  139.             var on = (data[i]['on'])? "true":"false";
  140.             var Row = addElement(root,"Row");
  141.             addElement(Row,"iconIndex", ind)
  142.             addElement(Row,"Name", data[i]['name'] )
  143.             addElement(Row,"Description", data[i]['text'] )
  144.             addElement(Row,"On", on )
  145.             addElement(Row,"LineNumber", data[i]['index'] )
  146.         }
  147.     }
  148.  
  149.     try{
  150.             top.icqConnector.NotifyPlugin(req,root.xml)        
  151.         }
  152.     catch(e){
  153.             trace(e,"setCurrentStatus Error")
  154.             }
  155.     // Disabling the apply button
  156.     disableApplyButton(true);    
  157. }
  158.  
  159. // Showing the table of icons --------------------------------------------------------------------
  160. function showMatix(id){
  161.     gl_row_id = id;
  162.     var rows =new Array(); 
  163.     rows = collectCurrentData();
  164.     for(i=0 ; i<=gl_num_of_icons ; i++){
  165.         document.getElementById('m'+i).style.filter = "";
  166.         document.getElementById('m'+i).style.cursor = "hand";
  167.         document.getElementById('m'+i).active = "true";            
  168.     }        
  169.     for(i=0 ; i<=gl_num_of_icons ; i++){    
  170.         for(j=0 ; j<rows.length ; j++){
  171.             if(rows[j]["iconIndex"]== i) {            
  172.                 if(ie6) {
  173.                     document.getElementById('m'+i).style.filter = "progid:DXImageTransform.Microsoft.BasicImage( Rotation=0,Mirror=0,Invert=0,XRay=0,Grayscale=1,Opacity=0.40)";
  174.                     document.getElementById('m'+i).style.cursor = "arrow";
  175.                 }
  176.                 else 
  177.                     document.getElementById('m'+i).style.filter = "gray()";                
  178.                     document.getElementById('m'+i).active = "false";
  179.             }
  180.         }
  181.     }        
  182.     
  183.     if(event.clientY<225){
  184.         document.getElementById('matrix').style.top = event.clientY + document.body.scrollTop;
  185.         document.getElementById('m-shadow').style.top = event.clientY + document.body.scrollTop + 3;
  186.     }
  187.     else {// if cursor is too close to the bottom of the page
  188.         document.getElementById('matrix').style.top = event.clientY + document.body.scrollTop - 100;
  189.         document.getElementById('m-shadow').style.top = event.clientY + document.body.scrollTop + 3 -100;
  190.     }
  191.     document.getElementById('matrix').style.left = event.clientX + document.body.scrollLeft;
  192.     document.getElementById('m-shadow').style.left = event.clientX + document.body.scrollLeft + 3;
  193. }
  194.  
  195. // hiding the table of icons -------------------------------------------------
  196. function hideMatrix(){    
  197.     document.getElementById('matrix').style.top = "700px";
  198.     document.getElementById('m-shadow').style.top = "700px";
  199. }
  200.  
  201. // Inserting the selected icon to the proper row ------------------------
  202. function switchIcon(iconId){
  203.     if(document.getElementById('m'+iconId).active == "true")
  204.     {
  205.         document.frm["c" + gl_row_id.substr(1)].disabled = false
  206.         document.getElementById(gl_row_id).src= "icons/" + iconId + ".gif";
  207.         hideMatrix();
  208.         disableApplyButton(false);
  209.     }    
  210. }
  211. // Texterea character limit
  212. function textCounter(obj, maxlimit) {
  213.     if (obj.value.length > maxlimit) obj.value = obj.value.substring(0, maxlimit);
  214.     disableApplyButton(false);
  215. }
  216.  
  217. // Apply button change state
  218. function disableApplyButton(mode){
  219.     document.getElementById('apply_btn').disabled = mode;
  220. }
  221.  
  222.  
  223. function hndlClick()
  224. {
  225.     if(event.srcElement.type != "text" && event.srcElement.type != "textarea" )
  226.         return false;
  227. }
  228.  
  229. document.oncontextmenu = hndlClick
  230.