// Поиск элемента по классу getElementsByClassName("название класса", элемент внутри которого ищем) function byId(node) { return typeof node == 'string' ? document.getElementById(node) : node; } var getElementsByClassName = (function(){ var d = window.document; if (typeof d.getElementsByClassName == 'function') return function(className, node){ return (node || d).getElementsByClassName(className); }; else if (typeof d.querySelectorAll == 'function') return function(className, node){ return (node || d).querySelectorAll('.' + className); }; else return function(className, node){ if (!className) return []; var elements = (node || document).getElementsByTagName('*'), list = [], expr = new RegExp('(^|\\b)' + className + '(\\b|$)'); if (elements.length == 0) return elements; for (var i = 0, length = elements.length; i < length; i++) if (expr.test(elements[i].className)) list[list.length] = elements[i]; return list; }; })(); // возвращает cookie если есть или undefined function getCookie(name){ var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)")) return matches ? decodeURIComponent(matches[1]) : undefined } // уcтанавливает cookie function setCookie(name, value, props){ props = props || {} var exp = props.expires; if (typeof exp == "number" && exp) { var d = new Date(); d.setTime(d.getTime() + exp * 1000); exp = props.expires = d; } if (exp && exp.toUTCString) { props.expires = exp.toUTCString(); } value = encodeURIComponent(value); var updatedCookie = name + "=" + value; for (var propName in props) { updatedCookie += "; " + propName; var propValue = props[propName]; if (propValue !== true) { updatedCookie += "=" + propValue; } } document.cookie = updatedCookie; } // удаляет cookie function deleteCookie(name){ setCookie(name, null, { expires: -1 }) } // Переключатель "показать-спрятать" function toggle(el){ el.style.display = (el.style.display == 'none') ? '' : 'none'; } // Добавить класс элементу function addClass(o, c){ var re = new RegExp("(^|\\s)" + c + "(\\s|$)", "g") if (re.test(o.className)) return o.className = (o.className + " " + c).replace(/\s+/g, " ").replace(/(^ | $)/g, "") } // Удалить класс элемента function removeClass(o, c){ var re = new RegExp("(^|\\s)" + c + "(\\s|$)", "g") o.className = o.className.replace(re, "$1").replace(/\s+/g, " ").replace(/(^ | $)/g, "") } // Убирает пробельные символы слева function ltrim(inp) { var ptrn = /\s*((\S+\s*)*)/; return inp.replace(ptrn, "$1"); } // Убирает пробельные символы справа function rtrim(inp) { var ptrn = /((\s*\S+)*)\s*/; return inp.replace(ptrn, "$1"); } // Убирает пробельные символы с обоих концов function trim(inp) { return ltrim(rtrim(inp)); } function checkField(field, validator) { field = byId(field); var val = field.value; switch (validator) { case 'float' : if (val == '') return; val = val.replace(/[\s]|[^0-9,\.]/g, ""); // Удаление НЕ цифр и НЕ точек и запятых val = val.replace(/[,]/g, "."); // Замена запятых на точки val = parseFloat(val)+''; // Преобразование в дробное число и затем в строку if (isNaN(val)) { field.value = ''; alert('Вы ввели не число!'); field.focus(); return; } val = val.replace(/[\.]/g, ","); // Замена точек на запятые if (val != field.value) alert('Вы ввели неправильное число! Оно будет атоматически исправлено.'); // Если началное значение изменилось уведомляем field.value = val; break; default : alert('Валидатор '+validator+' не существует.'); break; } } //############ Мои функции ############// function inputSpanClick(el) { try { el.parentNode.getElementsByTagName('input')[0].focus(); } catch (e) {} } function inputFocus(el) { try { el.parentNode.getElementsByTagName('span')[0].style.display = 'none'; } catch (e) {} } function inputBlur(el) { if (trim(el.value) == '') { el.value = ''; el.parentNode.getElementsByTagName('span')[0].style.display = ''; } } function inputChange(el, count, idout) { var output = document.getElementById(idout); var val = count - el.value.length; output.innerHTML = val; if (val < 1) { el.value = el.value.slice(0, count); output.innerHTML = '0'; output.style.color = '#FF3300'; } else { output.style.color = ''; } } function radioChange(el) { var output = document.getElementById(el.getAttribute('id').substr(5)); output.value = el.value; } function radioChangeBlockSender(sender, pos, num) { var el = byId(sender); if (pos == num) { el.value = ''; el.setAttribute('disabled', 'disabled'); } else { el.removeAttribute('disabled'); } } function formCheck(el, c_id) { var result = true; var form = document.getElementById(el); var i, j; var formLength = form.length; for (i = 0; i < formLength; i++) { if (form[i].getAttribute('id')) { if (form[i].type != 'checkbox') { form[i].style.backgroundColor = ''; } // Текстовые поля (скорее всего) if (form[i].getAttribute('required') && form[i].getAttribute('id').substr(0, 4) == 'dat_' && form[i].getAttribute('type') != 'hidden' && formElemCheck(form[i]) == false) { result = false; form[i].style.backgroundColor = '#FFD1CC'; } // Группа радиобатонов if (form[i].getAttribute('required') && form[i].getAttribute('id').substr(0, 4) == 'dat_' && form[i].getAttribute('type') == 'hidden') { if (formElemCheck(form[i]) == false) { result = false; form[i].parentNode.style.backgroundColor = '#FFD1CC'; } else { form[i].parentNode.style.backgroundColor = ''; } } if (form[i].getAttribute('required') && form[i].getAttribute('id') == 'cun_naim' && formElemCheck(form[i]) == false) { result = false; form[i].style.backgroundColor = '#FFD1CC'; } } } try { if (result == true) { var v_code = document.getElementById("captcha").value; var bc="v="+v_code+"&cid="+c_id; var dc = new AJAXInteraction('/portal/page/portal/server/server_frm_formreg', contentupdate_ug); dc.doPost(bc); } } catch (e) {} return result; } function formCheckAndRecive(el) { if (formCheck(el, null) == false) return false; save_org(arr_save['a'], arr_save['b'], arr_save['lang'], arr_save['count'], arr_save['page'], arr_save['sus'], arr_save['sen'], arr_save['h']); return true; } function formElemCheck(el) { var elName = el.nodeName.toLowerCase(); var value = el.value; if (elName == "input") { // INPUT // Определяем тип input-а type = el.type.toLowerCase(); // Разбираем все инпуты по типам и обрабатываем содержимое switch (type) { case 'text' : if (value == '') { return false; } break; case 'file' : if (value == '') { return false; } break; case 'checkbox' : // Ничего не делаем break; case 'radio' : // Ничего не делаем break; case 'hidden' : // На самом деле проверяем группу радиобатонов %) var rb = document.getElementsByName('item_dat_'+el.getAttribute('id').substr(4)); for (var i = 0; i < rb.length; i++) { if (rb[i].checked == true) return true; } return false; break; default : // Сюда попадают input-ы, которые не требуют обработки // type = hidden, submit, button, image break; } } else { if (elName == "textarea") { if (value == '') { return false; } } else if (elName == "select") { if (el.selectedIndex == 0) { return false; } } else { // Обнаружен неизвестный элемент ;) } } return true; } function contentupdate_ug(val){ document.getElementById('captcha-wrapper').innerHTML = val; } function addParam(form, key, value){ var input = document.createElement("textarea"); input.name = key; input.value = value; form.appendChild(input); } function backdata(svalue,name){ this.document.getElementById(name).value=svalue; try { this.document.getElementById('tow_'+name.split('dat_')[1]).value=svalue.split('##')[0]; } catch (e) {} } // Мой AJAX function loadHTMLDoc(url, elem) { // для "родного" XMLHttpRequest if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = function() { return processReqChange(elem) }; req.open("GET", url, true); req.send(null); // для версии с ActiveX } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange = function() { return processReqChange(elem) }; req.open("GET", url, true); req.send(); } } } function processReqChange(elem) { if (req.readyState == 4) { if (req.status == 200) { document.getElementById(elem).innerHTML = req.responseText; } else {/*alert("Не удалось получить данные:\n" + req.statusText);*/} } } // Роутер событий и обработчиков Array.prototype.contains = function(obj) { var i = this.length; while (i--) { if (this[i] === obj) { return true; } } return false; } Array.prototype.append = function(obj, nodup) { if(!(nodup && this.contains(obj))) { this[this.length] = obj; } } var jsEvent = new Array(); jsEvent.EventRouter = function(el,eventType){ this.lsnrs = new Array(); this.el = el; el.eventRouter = this; el[eventType] = jsEvent.EventRouter.callback; } jsEvent.EventRouter.prototype.addListener = function(lsnr){ this.lsnrs.append(lsnr,true); } jsEvent.EventRouter.prototype.removeListener = function(lsnr){ this.lsnrs.remove(lsnr); } jsEvent.EventRouter.prototype.notify = function(e){ var lsnrs = this.lsnrs; for(var i = 0; i < lsnrs.length; i++){ var lsnr = lsnrs[i]; lsnr.call(this,e); } } jsEvent.EventRouter.callback = function(event){ var e = event || window.event; var router = this.eventRouter; router.notify(e) } function adm_listFilter(el) { try { var sort = 0; var sort_arr = byId('reg_list-Sort').getElementsByTagName('a'); for (var i = 0; i < sort_arr.length; i++) { if (el === sort_arr[i]) { sort = i; break; } if (sort_arr[i].style.fontWeight != '') { sort = i; } } var cat = byId('reg_list-Cat'); if (cat.selectedIndex > 0) { cat = '&cat='+cat.options[cat.selectedIndex].value; } else { cat = ''; } var fnd = byId('fnd'); if (fnd.value != '' && fnd.value != 'Поиск в разделе') { fnd = '&fnd='+encodeURIComponent(fnd.value); } else { fnd = ''; } //alert('?sort='+sort+cat+fnd); window.location = window.location.pathname+'?sort='+sort+cat+fnd; } catch (exception) {} }