Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function horizontal_slider(element, attr) {
  2.  
  3.     sliderWidth = attr["width"];
  4.     range1      = attr["min"];
  5.     range2      = attr["max"];
  6.     step        = attr["single_step"];
  7.     pageStep    = attr["page_step"];
  8.     if( (attr["tick_interval"]!=0) && (attr["tick_interval"]!=undefined) )
  9.     {
  10.         tickCount   = attr["tick_interval"];
  11.     }
  12.     else
  13.     {
  14.         if(step>pageStep)
  15.             count = step;
  16.         else
  17.             count = pageStep;
  18.  
  19.         tickCount = (range2-range1) / count;
  20.     }
  21.  
  22.     var knobWidth = 17;             // ширина и высота бегунка
  23.     var knobHeight = 21;            // изменяются в зависимости от используемых изображений
  24.     var sliderHeight = 21;          // высота slider'а
  25.  
  26.     var offsX,tmp;                  // вспомагательные переменные
  27.     var d = document;
  28.     var isIE = d.all || window.opera;   // определяем модель DOM
  29.     var point = (sliderWidth-knobWidth-3)/(range2-range1);
  30.     // point - количество пикселей на единицу значения
  31.      
  32.     var slider = d.createElement('DIV'); // создаем slider
  33.     slider.className = 'slider';
  34.     slider.onchange = attr["change"];
  35.     element.slider = slider;
  36.  
  37.     var ticks = d.createElement('table');
  38.     ticks.className="BottomTable";
  39.     var row = d.createElement('tr');
  40.     for(i=0;i<tickCount;i++)
  41.     {
  42.         row.innerHTML+="<td>&nbsp;</td>";
  43.     }
  44.     ticks.appendChild(row);
  45.  
  46.     element.appendChild(slider);  
  47.     element.appendChild(ticks);
  48.     element.style.width = sliderWidth + "px";
  49.     element.onchange = onchange;
  50.  
  51.     var knob = d.createElement('DIV');  // создаем ползунок
  52.     knob.className = 'knob';
  53.     slider.appendChild(knob); // добавляем его в документ
  54.  
  55.     knob.style.left = 0;            // бегунок в нулевое значение
  56.     knob.style.width = knobWidth+'px';
  57.     knob.style.height = knobHeight+'px';
  58.     slider.style.width = sliderWidth+'px';
  59.     slider.style.height = sliderHeight+'px';
  60.  
  61.  
  62.     var sliderOffset = slider.offsetLeft;           // sliderOffset - абсолютное смещение slider'а
  63.     tmp = slider.offsetParent;      // от левого края в пикселях (в IE не работает)
  64.     while(tmp.tagName != 'BODY') {
  65.         sliderOffset += tmp.offsetLeft;     // тут его и находим
  66.         tmp = tmp.offsetParent;
  67.     }
  68.  
  69.     if(isIE)                        // в зависимости от модели DOM
  70.     {                               // назначаем слушателей событий
  71.         knob.onmousedown = startCoord;    
  72.         slider.onclick = sliderClick;
  73.         knob.onmouseup = function(){ endCoord(element); };
  74.         slider.onmouseup = function(){ endCoord(element); };
  75.     }
  76.     else {
  77.         knob.addEventListener("mousedown", startCoord, true);      
  78.         slider.addEventListener("click", sliderClick, true);      
  79.         knob.addEventListener("mouseup", endCoord, true);  
  80.         slider.addEventListener("mouseup", endCoord, true);
  81.     }
  82.  
  83.     // далее подробно не описываю, кто захочет - разберется
  84.     //////////////////// функции установки/получения значения //////////////////////////
  85.  
  86.     function setValue(x)    // установка по пикселям
  87.     {
  88.         if(x < 0) knob.style.left = 0;
  89.         else if(x > sliderWidth-knobWidth-3) knob.style.left = (sliderWidth-3-knobWidth)+'px';
  90.         else {
  91.             if(step == 0) knob.style.left = x+'px';        
  92.             else knob.style.left = Math.round(x/(step*point))*step*point+'px';
  93.         }
  94.         element.value = getValue();
  95.         slider.onchange(element);
  96.     }
  97.     element._SetValue_ = setValue;
  98.  
  99.     function setValue2(x,slider)   // установка по значению
  100.     {
  101.         if(x < range1 || x > range2) alert('Value is not included into a slider range!');
  102.         else setValue((x-range1)*point);
  103.     }
  104.  
  105.     function getValue()
  106.     {return Math.round(parseInt(knob.style.left)/point)+range1;}
  107.  
  108.     /////////////////////////////// слушатели событий ////////////////////////////////////
  109.  
  110.     function sliderClick(e) {  
  111.         var x;
  112.         if(isIE) {
  113.         if(event.srcElement != slider) return; //IE onclick bug
  114.             x = event.offsetX - Math.round(knobWidth/2);
  115.         }  
  116.         else x = e.pageX-sliderOffset-knobWidth/2;
  117.         setValue(x);
  118.     }
  119.  
  120.     function startCoord(e) {              
  121.         if(isIE) {
  122.             offsX = event.clientX - parseInt(knob.style.left);
  123.             slider.onmousemove = mov;
  124.         }
  125.         else {            
  126.             slider.addEventListener("mousemove", mov, true);
  127.         }
  128.     }
  129.      
  130.     function mov(e) {
  131.         var x;
  132.         if(isIE) x = event.clientX-offsX;
  133.         else x = e.pageX-sliderOffset-knobWidth/2;
  134.         setValue(x);
  135.     }
  136.      
  137.     function endCoord(slider) {
  138.         try{slider.onmousemove = null;}
  139.         catch(e){}
  140.         try{slider.removeEventListener("mousemove", mov, true);}
  141.         catch(e){}
  142.     }
  143.     // объявляем функции setValue2 и getValue как методы класса
  144.     element.setValue = function(x){setValue2(x,slider);};
  145.     element.getValue = function (x) { getValue(slider); };
  146.  
  147.  
  148.     //Работа с клавиатурой
  149.     keydown = function(event){
  150.         code = event.keyCode;
  151.         if(code==37)
  152.         {
  153.             add = -step;
  154.         }
  155.         else if(page==39)
  156.         {
  157.             add = step;
  158.         }
  159.         else if(code==33)
  160.         {
  161.             add = -page_step;
  162.         }
  163.         else if(code==34)
  164.         {
  165.             add = page_step;
  166.         }
  167.  
  168.         newValue = getValue() + add;
  169.         if( !( (newValue<range1) || (newValue>range2) ) )
  170.         {
  171.             setValue(newValue);
  172.         }
  173.     }
  174.     element.onkeypress = keydown;
  175.     knob.onkeydown = keydown;
  176.  
  177.     element.value = attr["value"];
  178.     element.setValue(element.value);
  179. }
  180.  
  181.  
  182.  
  183. function vertical_slider(element, attr)
  184. {
  185.     sliderHeight = attr["height"];
  186.     range1       = attr["min"];
  187.     range2       = attr["max"];
  188.     step         = attr["single_step"];
  189.     pageStep     = attr["page_step"];
  190.     if( (attr["tick_interval"]!=0) && (attr["tick_interval"]!=undefined) )
  191.     {
  192.         tickCount   = attr["tick_interval"];
  193.     }
  194.     else
  195.     {
  196.         if(step>pageStep)
  197.             count = step;
  198.         else
  199.             count = pageStep;
  200.  
  201.         tickCount = (range2-range1) / count;
  202.     }
  203.  
  204.     var knobWidth = 21;             // ширина и высота бегунка
  205.     var knobHeight = 17;            // изменяются в зависимости от используемых изображений
  206.     var sliderWidth = 17;          // высота slider'а
  207.  
  208.     var offsY,tmp;                  // вспомагательные переменные
  209.     var d = document;
  210.     var isIE = d.all || window.opera;   // определяем модель DOM
  211.     var point = (sliderHeight-knobHeight-3)/(range2-range1);
  212.     element.point = point;
  213.     // point - количество пикселей на единицу значения
  214.    
  215.     var tbl = d.createElement('table');
  216.     var row = d.createElement('tr');
  217.     var slider = d.createElement('td'); // создаем slider
  218.     slider.className = 'vertical_slider';
  219.     var ticks = d.createElement('td');
  220.     ticks.className="RightTable";
  221.     code="<div><table>";
  222.     for(i=0;i<tickCount;i++)
  223.     {
  224.         code+="<tr><td>&nbsp;</td></tr>";
  225.     }
  226.     ticks.innerHTML=code+"</table></div>";
  227.     row.appendChild(slider);
  228.     row.appendChild(ticks);
  229.     tbl.appendChild(row);
  230.     tbl.onchange = attr["change"];
  231.     element.slider = tbl;
  232.  
  233.     element.appendChild(tbl);
  234.     element.style.width = sliderWidth + "px";
  235.     element.onchange = onchange;
  236.  
  237.     var knob = d.createElement('DIV');  // создаем ползунок
  238.     knob.className = 'knob';
  239.     slider.appendChild(knob); // добавляем его в документ
  240.  
  241.     knob.style.left = 0;            // бегунок в нулевое значение
  242.     knob.style.width = knobWidth+'px';
  243.     knob.style.height = knobHeight+'px';
  244.     slider.style.width = sliderWidth+'px';
  245.     slider.style.height = sliderHeight+'px';
  246.  
  247.  
  248.     var sliderOffset = slider.offsetTop;           // sliderOffset - абсолютное смещение slider'а
  249.     tmp = slider.offsetParent;      // от левого края в пикселях (в IE не работает)
  250.     while(tmp.tagName != 'BODY') {
  251.         sliderOffset += tmp.offsetTop;     // тут его и находим
  252.         tmp = tmp.offsetParent;
  253.     }
  254.  
  255.     if(isIE)                        // в зависимости от модели DOM
  256.     {                               // назначаем слушателей событий
  257.         knob.onmousedown = startCoord;    
  258.         slider.onclick = sliderClick;
  259.         knob.onmouseup = function(){ endCoord(element); };
  260.         slider.onmouseup = function(){ endCoord(element); };
  261.     }
  262.     else {
  263.         knob.addEventListener("mousedown", startCoord, true);      
  264.         slider.addEventListener("click", sliderClick, true);      
  265.         knob.addEventListener("mouseup", endCoord, true);  
  266.         slider.addEventListener("mouseup", endCoord, true);
  267.     }
  268.  
  269.     // далее подробно не описываю, кто захочет - разберется
  270.     //////////////////// функции установки/получения значения //////////////////////////
  271.  
  272.     // далее подробно не описываю, кто захочет - разберется
  273.     //////////////////// функции установки/получения значения //////////////////////////
  274.  
  275.     function setValue(y)    // установка по пикселям
  276.     {
  277.         top_ = 0;
  278.         if(y < 0) top_ = 0;
  279.         else if(y > sliderHeight-knobHeight-3) top_ = (sliderHeight-3-knobHeight);
  280.         else {
  281.             if(step == 0) top_ = y;
  282.             else top_ = Math.round(y/(step*point))*step*point;
  283.         }
  284.         knob.style.top = top_+'px';
  285.         element.value = getValue();
  286.         knob.style.top = top_/* - Math.round(slider.offsetHeight/2)*/ + 'px';
  287.         tbl.onchange(element);
  288.     }
  289.     element._SetValue_ = setValue;
  290.  
  291.     function setValue2(y,slider)   // установка по значению
  292.     {
  293.         if (y < range1 || y > range2) alert('Value is not included into a slider range!');
  294.         else {
  295.             setValue((y - range1) * point);
  296.         }
  297.     }
  298.  
  299.     function getValue()
  300.     {
  301.         return range2-Math.round(parseInt(knob.style.top)/point);
  302.     }
  303.  
  304.     /////////////////////////////// слушатели событий ////////////////////////////////////
  305.  
  306.     function sliderClick(e) {  
  307.         var y;
  308.         if(isIE) {
  309.         if(event.srcElement != slider) return; //IE onclick bug
  310.             y = event.offsetY - Math.round(knobHeight/2);
  311.         }
  312.         else y = e.pageY-sliderOffset-knobHeight/2;
  313.         setValue(y);
  314.     }
  315.  
  316.     function startCoord(e) {
  317.         if(isIE) {
  318.             offsY = event.clientY - parseInt(knob.style.top);
  319.             slider.onmousemove = mov;
  320.             slider.onmouseout = endCoord;
  321.         }
  322.         else {            
  323.             slider.addEventListener("mousemove", mov, true);
  324.             slider.addEventListener("mouseout", endCoord, true);
  325.         }
  326.     }
  327.      
  328.     function mov(e) {
  329.         var y;
  330.         if(isIE) y = event.clientY-offsY;
  331.         else y = e.pageY-sliderOffset-knobHeight/2;
  332.         setValue(y);
  333.     }
  334.      
  335.     function endCoord(slider) {
  336.         try{slider.onmousemove = null;}
  337.         catch(e){}
  338.         try{slider.removeEventListener("mousemove", mov, true);}
  339.         catch(e){}
  340.     }
  341.     // объявляем функции setValue2 и getValue как методы класса
  342.     this.getValue = function(y){getValue(slider);};
  343.  
  344.  
  345.     //Работа с клавиатурой
  346.     keydown = function(event){
  347.         code = event.keyCode;
  348.         if(code==37)
  349.         {
  350.             add = -step;
  351.         }
  352.         else if(page==39)
  353.         {
  354.             add = step;
  355.         }
  356.         else if(code==33)
  357.         {
  358.             add = -page_step;
  359.         }
  360.         else if(code==34)
  361.         {
  362.             add = page_step;
  363.         }
  364.  
  365.         newValue = getValue() + add;
  366.         if( !( (newValue<range1) || (newValue>range2) ) )
  367.         {
  368.             setValue(newValue);
  369.         }
  370.     }
  371.     element.onkeypress = keydown;
  372.     knob.onkeydown = keydown;
  373.  
  374.  
  375.     element.getValue = function (){return element.value};
  376.     element.value = attr["value"];
  377.     y = point * element.value - 0.5;
  378.     element.setValue = function (val) { element._SetValue_(point * (range2 - val)) };
  379.     element.setValue(element.value);
  380. }
  381.  
  382.  
  383.  
  384. function Slider(obj,attr)
  385. {
  386.     if (attr["orientation"] == "horizontal") {
  387.         horizontal_slider(obj, attr);
  388.     }
  389.     else if (attr["orientation"] == "vertical") {
  390.         vertical_slider(obj, attr);
  391.     }
  392.     type = attr["field"].toString();
  393.     if ((type.indexOf("HTML") > -1) || (type == "my")) {
  394.         obj.oldChange = obj.slider.onchange;
  395.         if (type.indexOf("HTML") > -1) {
  396.             obj.field = attr["field"];
  397.         }
  398.         else {
  399.             obj.field = document.createElement("input");
  400.             obj.appendChild(obj.field);
  401.         }
  402.         obj.slider.onchange = function () {
  403.             obj.field.value = obj.value;
  404.             obj.oldChange(obj);
  405.         };
  406.         obj.field.onchange = function () {
  407.             obj.setValue(this.value);
  408.         }
  409.         obj.field.className = "sliderInput " + attr["orientation"];
  410.         obj.setValue(attr["value"]);
  411.     }
  412. }
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419. function getShortDays()
  420. {
  421.     return ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
  422. }
  423. function getFullDays()
  424. {
  425.     return ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"];
  426. }
  427. function getShortMonths()
  428. {
  429.     return ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"]
  430. }
  431. function getFullMonths()
  432. {
  433.     return ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"];
  434. }
  435.  
  436. function checkDateField(date,field)
  437. {
  438.     format = field.format;
  439.     value = field.value;
  440.  
  441.     err=(format.length==2) && (value.length!=2);
  442.     err|=((format=="d")||(format=="dd"))&&((value<1)||(value>31));
  443.     err|=((format=="M")||(format=="MM"))&&((value<1)||(value>12));
  444.     if( (format=="ddd")||(format=="dddd") )
  445.     {
  446.         if(format=="ddd")
  447.             arr = getShortDays();
  448.         else
  449.             arr = getFullDays();
  450.  
  451.         found=false;
  452.         for(i=0;i<arr.length;i++)
  453.             if(arr[i]==value)
  454.             {
  455.                 found=true;
  456.             }
  457.         err|=!found;
  458.     }
  459.     if( (format=="MMM")||(format=="MMMM") )
  460.     {
  461.         if(format=="MMM")
  462.             arr = getShortMonths();
  463.         else
  464.             arr = getFullMonths();
  465.  
  466.         found=false;
  467.         for(i=0;i<arr.length;i++)
  468.             if(arr[i]==value)
  469.             {
  470.                 found=true;
  471.             }
  472.         err|=!found;
  473.     }
  474.     err|=(format=="yy")&&((value<0)||(value>99));
  475.     err|=(format=="yyyy")&&((value<0)||(value>9999));
  476.     err|=((format=="h")||(format=="hh"))&&((value<0)||(value>23));
  477.     err|=((format=="H")||(format=="HH"))&&((value<0)||(value>11));
  478.     err|=(format=="mm")&&((value<0)||(value>59));
  479.  
  480.     if(err)
  481.         field.className=format+" error";
  482.     else
  483.         field.className=format;
  484.  
  485.  
  486.     if(!err)
  487.     {
  488.         if( (format=="d")||(format=="dd") )
  489.             date.date_time.setDate(value);
  490.         else if ( (format=="M") || (format=="MM") )
  491.             date.date_time.setMonth(value);
  492.         else if ( (format=="MMM") || (format=="MMMM") )
  493.         {
  494.             if(format=="MMM")
  495.                 arr = getShortMonths();
  496.             else
  497.                 arr = getFullMonths();
  498.  
  499.             i = 0;
  500.             r = 0;
  501.             for(i=0;i<arr.length;i++)
  502.                 if(arr[i]==value)
  503.                     r=i;
  504.             date.date_time.setMonth(r);
  505.         }
  506.         else if(format=="yyyy")
  507.             date.date_time.setYear(value);
  508.         else if(format=="yy")
  509.             date.date_time.setYear(value+1900);
  510.         else if((format=="h")||(format=="hh"))
  511.             date.date_time.setHours(value);
  512.         else if((format=="m")||(format=="mm"))
  513.             date.date_time.setMinutes(value);
  514.  
  515.         date.setDate(date.date_time);
  516.     }
  517. }
  518.  
  519. function DateInput(el,attr)
  520. {
  521.     el.date_time = attr["date_time"];
  522.     el.minimum_date_time = attr["minimum_date_time"];
  523.     el.maximum_date_time = attr["maximum_date_time"];
  524.     el.display_format = attr["display_format"];
  525.     el.change = attr["change"];
  526.     el.className = 'Date';
  527.  
  528.     places = el.display_format.split('|');
  529.  
  530.     el.fields = Array();
  531.     for(i=0;i<places.length;i++)
  532.     {
  533.         isInput = (places[i]=='d'   ) ||
  534.                   (places[i]=='dd'  ) ||
  535.                   (places[i]=='ddd' ) ||
  536.                   (places[i]=='dddd') ||
  537.                   (places[i]=='M'   ) ||
  538.                   (places[i]=='MM'  ) ||
  539.                   (places[i]=='MMM' ) ||
  540.                   (places[i]=='MMMM') ||
  541.                   (places[i]=='yy'  ) ||
  542.                   (places[i]=='yyyy') ||
  543.                   (places[i]=='h'   ) ||
  544.                   (places[i]=='hh'  ) ||
  545.                   (places[i]=='H'   ) ||
  546.                   (places[i]=='HH'  ) ||
  547.                   (places[i]=='m'   ) ||
  548.                   (places[i]=='mm'  );
  549.         if(isInput)
  550.         {
  551.             newField = document.createElement('input');
  552.             newField.type='text';
  553.             newField.className = places[i];
  554.             newField.format = places[i];
  555.         }
  556.         else
  557.         {
  558.             newField = document.createElement('span');
  559.             newField.innerHTML = places[i];
  560.         }
  561.         newField.isInput = isInput;
  562.  
  563.         el.fields.push(newField);
  564.         el.appendChild(newField);
  565.     }
  566.  
  567.     el.setDate = function(date){
  568.         el.date_time = date;
  569.         for(i=0;i<el.fields.length;i++)
  570.         {
  571.             field = el.fields[i];
  572.             if(field.isInput)
  573.             {
  574.                 format = field.format;
  575.  
  576.                 if( (format == "d")||(format == "dd") )
  577.                     field.value = date.getDate().toString();
  578.                 if( (format == "dd") || (field.value.length==1) )
  579.                     field.value = "0"+field.value;
  580.                 ShortDays = getShortDays();
  581.                 FullDays = getFullDays();
  582.                 if( format == "ddd" )
  583.                     field.value = ShortDays[date.getDay()];
  584.                 if( format == "dddd" )
  585.                     field.value = FullDays[date.getDay()];
  586.  
  587.                 if( (format == "M")||(format=="MM") )
  588.                     field.value = date.getMonth()+1;
  589.                 if( (format == "MM")&&(field.value.length==1) )
  590.                     field.value = "0"+field.value;
  591.                 ShortMonths =getShortMonths();
  592.                 FullMonths = getFullMonths();
  593.                 if( format == "MMM" )
  594.                     field.value = ShortMonths[date.getMonth()];
  595.                 if( format == "MMMM" )
  596.                     field.value = FullMonths[date.getMonth()];
  597.  
  598.                 if( (format=="yy") || (format=="yyyy") )
  599.                 {
  600.                     yearStr = date.getFullYear().toString();
  601.                     if(format=="yy")
  602.                     {
  603.                         field.value = yearStr[2]+yearStr[3];
  604.                     }
  605.                     else
  606.                     {
  607.                         field.value = yearStr;
  608.                     }
  609.                 }
  610.  
  611.                 if ( (format=="h") || (format=="hh") || (format=="H") || (format=="HH") )
  612.                 {
  613.                     hours = date.getHours();
  614.                     if( (hours>=12) && (format.indexOf('H')>-1) )
  615.                         hours = hours-12;
  616.  
  617.                     field.value = hours;
  618.                     if( (format.length==2) && (field.value.length==1) )
  619.                         field.value="0"+field.value;
  620.                 }
  621.  
  622.                 if ( (format=='m') || (format=='mm') )
  623.                 {
  624.                     field.value = date.getMinutes();
  625.                     if( (format.length==2) && (field.value.length==1) )
  626.                     {
  627.                         field.value="0"+field.value;
  628.                     }
  629.                 }
  630.  
  631.                 field.oldvalue = field.value;
  632.                 field.onchange = function(){checkDateField(el,this);}
  633.             }
  634.             el.change(el);
  635.         }
  636.     }
  637.     el.setDate(el.date_time);
  638.     el.getDate = function () { return el.date_time; };
  639.  
  640.     type = attr["field"].toString();
  641.     if ((type.indexOf("HTML") > -1) || (type == "my")) {
  642.         if (type.indexOf("HTML") > -1) {
  643.             el.field = attr["field"];
  644.         }
  645.         else {
  646.             el.field = document.createElement("input");
  647.             el.appendChild(el.field);
  648.         }
  649.         el.field.className = "dateInput";
  650.         el.oldChange = el.change;
  651.         el.change = function () {
  652.             el.field.value = el.getDate().toString();
  653.         }
  654.         el.field.onchange = function () {
  655.             el.setDate(new Date(el.field.value));
  656.         }
  657.         el.setDate(el.getDate());
  658.     }
  659. }
  660.  
  661.  
  662.  
  663. function ArrayInput(el, attr) {
  664.     el.className = "Array";
  665.     el.change = attr["change"];
  666.  
  667.     topPanel = document.createElement("div");
  668.     topInput = document.createElement("input");
  669.     topInput.className = "topInput";
  670.     topPanel.appendChild(topInput);
  671.  
  672.     el.setValues = function (values) {
  673.         el.values = values;
  674.         if (el.main == undefined) {
  675.             el.main = document.createElement("div");
  676.         }
  677.         else {
  678.             el.main.innerHTML = "";
  679.         }
  680.         for (i = 0; i < el.values.length; i++) {
  681.             row = document.createElement("div");
  682.             row.innerHTML = "<span class=\"check\">&nbsp;</span><input type=\"text\" value=\"" + el.values[i] + "\" />";
  683.             row.onclick = function () {
  684.                 if (this.className == "active") {
  685.                     this.className = "";
  686.                 }
  687.                 else {
  688.                     this.className = "active";
  689.                 }
  690.                 el.change(el);
  691.             }
  692.             el.main.appendChild(row);
  693.         }
  694.     }
  695.     el.setValues(attr["values"]);
  696.  
  697.     el.setChecked = function (indexes) {
  698.         rows = el.main.childNodes;
  699.         indexesStr = indexes.join(";") + ";";
  700.         for (i = 0; i < rows.length; i++) {
  701.             row = rows.item(i);
  702.             if (indexesStr.indexOf(i + ";") > -1) {
  703.                 row.className = "active";
  704.             }
  705.             else {
  706.                 row.className = "";
  707.             }
  708.         }
  709.     }
  710.     el.setChecked(attr["selectedIndexes"]);
  711.  
  712.     el.getChecked = function (displayFilter) {
  713.         rows = el.main.childNodes;
  714.         res = Array();
  715.         for (i = 0; i < rows.length; i++) {
  716.             row = rows.item(i);
  717.             if (row.className == "active") {
  718.                 if ((displayFilter == undefined) || (row.style.display != 'none')) {
  719.                     res.push(i);
  720.                 }
  721.             }
  722.         }
  723.         return res;
  724.     }
  725.     el.change(el);
  726.  
  727.     topInput.change = function () {
  728.         rows = el.main.childNodes;
  729.         for (i = 0; i < rows.length; i++) {
  730.             text = rows.item(i).childNodes.item(1).value;
  731.             if ((text.indexOf(this.value) == 0) || (this.value == "")) {
  732.                 rows.item(i).style.display = 'block';
  733.             }
  734.             else {
  735.                 rows.item(i).style.display = 'none';
  736.             }
  737.         }
  738.     }
  739.     topInput.onkeypress = function () { this.change(); }
  740.     topInput.onkeydown = function () { this.change(); }
  741.     topInput.onkeyup = function () { this.change(); }
  742.     topInput.onchange = function () { this.change(); }
  743.  
  744.     el.subPanel = document.createElement('div');
  745.     el.subPanel.className = 'subPanel';
  746.  
  747.     bottom = document.createElement("div");
  748.     bottom.className = "bottomPanel";
  749.  
  750.     addButton = document.createElement('button');
  751.     addButton.innerText = "Добавить";
  752.     addButton.onclick = function () {
  753.         el.subPanel.style.display = 'block';
  754.         el.subPanel.innerHTML = "";
  755.  
  756.         topDiv = document.createElement('div');
  757.         close = document.createElement('span');
  758.         close.className = 'closeButton';
  759.         close.innerText = " ";
  760.         close.onclick = function () { el.subPanel.style.display = 'none'; }
  761.         topDiv.appendChild(close);
  762.  
  763.         mainTbl = document.createElement("table");
  764.         row1 = document.createElement("tr");
  765.         td1 = document.createElement("td");
  766.         td1.innerText = "Название пункта : ";
  767.         td2 = document.createElement("td");
  768.         el.valueInput = document.createElement("input");
  769.         td2.appendChild(el.valueInput);
  770.         row1.appendChild(td1);
  771.         row1.appendChild(td2);
  772.         row2 = document.createElement("tr");
  773.         td3 = document.createElement("td");
  774.         td3.innerText = "Выделен : ";
  775.         td4 = document.createElement("tr");
  776.         el.checkInput = document.createElement("input");
  777.         el.checkInput.type = "checkbox";
  778.         td4.appendChild(el.checkInput);
  779.         row2.appendChild(td3);
  780.         row2.appendChild(td4);
  781.         mainTbl.appendChild(row1);
  782.         mainTbl.appendChild(row2);
  783.  
  784.         bottomDiv = document.createElement('div');
  785.         addBtn = document.createElement('button');
  786.         addBtn.innerText = 'Добавить';
  787.         addBtn.onclick = function () {
  788.             el.values.push(el.valueInput.value);
  789.             checked = el.getChecked();
  790.             if (el.checkInput.checked) {
  791.                 checked.push(el.values.length - 1);
  792.             }
  793.             el.setValues(el.values);
  794.             el.setChecked(checked);
  795.             el.change(el);
  796.         }
  797.         bottomDiv.appendChild(addBtn);
  798.  
  799.         el.subPanel.appendChild(topDiv);
  800.         el.subPanel.appendChild(mainTbl);
  801.         el.subPanel.appendChild(bottomDiv);
  802.     }
  803.     bottom.appendChild(addButton);
  804.  
  805.     deleteButton = document.createElement('button');
  806.     deleteButton.innerText = 'Удалить';
  807.     deleteButton.onclick = function () {
  808.         checked = el.getChecked(true);
  809.         values = el.values;
  810.  
  811.         newValues = Array();
  812.         newIndexes = Array();
  813.         add = 0;
  814.         for (i = 0; i < values.length; i++) {
  815.             deleting = false;
  816.             for (j = 0; j < checked.length; j++) {
  817.                 if (i == checked[j]) {
  818.                     deleting = true;
  819.                     add++;
  820.                 }
  821.             }
  822.             if (!deleting) {
  823.                 newValues.push(values[i]);
  824.                 newIndexes.push({
  825.                     newIndex: i - add,
  826.                     oldIndex: i
  827.                 });
  828.             }
  829.         }
  830.         values = newValues;
  831.  
  832.         newChecked = Array();
  833.         allChecked = el.getChecked().join(";") + ";";
  834.         for (i = 0; i < newIndexes; i++) {
  835.             oldIndex = newIndexes[i];
  836.             if (allChecked.indexOf(oldIndex + ";") > -1) {
  837.                 newChecked.push(newIndexes[i].newIndex);
  838.             }
  839.         }
  840.         el.setValues(values);
  841.         el.setChecked(newChecked);
  842.     }
  843.     bottom.appendChild(deleteButton);
  844.  
  845.     el.appendChild(topPanel);
  846.     el.appendChild(el.main);
  847.     el.appendChild(el.subPanel);
  848.     el.appendChild(bottom);
  849. }
  850.  
  851.  
  852.  
  853. function Control(mode,selector,func,attributes)
  854. {
  855.     objects=Array();
  856.     if (mode == "class") {
  857.         objects = document.getElementsByClassName(selector);
  858.     }
  859.     else if (mode == "id") {
  860.         objects.push(document.getElementById(selector));
  861.     }
  862.     else if (mode == "classes") {
  863.         for (i = 0; i < selector.length; i++) {
  864.             v_class = selector[i];
  865.             add = document.getElemntsByClassName(v_class);
  866.             for (j = 0; j < add.length; j++)
  867.                 objects.push(add[i]);
  868.         }
  869.     }
  870.     else if (mode == "ids") {
  871.         for (i = 0; i < selector.length; i++) {
  872.             objects.push(document.getElementById(selector[i]));
  873.         }
  874.     }
  875.     else if (mode == "object") {
  876.         objects.push(selector);
  877.     }
  878.     else if (mode == "objects") {
  879.         for (i = 0; i < selector.length; i++) {
  880.             objects.push(selector[i]);
  881.         }
  882.     }
  883.  
  884.  
  885.     for (zi = 0; zi < objects.length; zi++) {
  886.         try {
  887.             func(objects[zi], attributes);
  888.         }
  889.         catch (e) {
  890.         }
  891.     }
  892. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement