var FlatControls = {}; FlatControls.AbstractControl = function() {}; FlatControls.AbstractControl.prototype = { initialize: function(id, owner) { this.id = id; this.owner = $(owner); this._div = $c(owner,"DIV"); this._div.id = id; this._div.style.width = 50; this._div.style.height = 50; this._width = 50; this._height = 50; this.isIE = navigator.userAgent.toLowerCase().indexOf("msie") >= 0; }, attachEvent: function(name,method,inst) { new LocalEventWrapper(this._div,name,method,inst); }, getWidth: function() { return getPos(this._div).width==0?this._width:getPos(this._div).width; }, setWidth: function(w) { this._width = w; this._div.style.width = w; }, getHeight: function() { return getPos(this._div).height==0?this._height:getPos(this._div).height; }, setHeight: function(h) { this._height=h; this._div.style.height = h; }, show: function() { this._div.style.display = "block"; //new Spry.Effect.Fade(this._div, {duration: 300, from: 0, to: 100, toggle: true}).start(); }, hide: function() { this._div.style.display = "none"; }, isVisible: function() { return this._div.style.display != "none"; }, setVisible: function(vis) { if (vis) { this.show(); } else { this.hide(); } }, getPosition: function() { return this._div.style.position; }, setPosition: function(p) { this._div.style.position = p; }, getLeft: function() { return getPos(this._div).left; }, setLeft: function(l) { this._div.style.left = l; }, getTop: function() { return getPos(this._div).top; }, setTop: function(t) { this._div.style.top = t; }, getClassName: function() { return this._div.className; }, setClassName: function(cn) { this._div.className = cn; }, isDisabled: function() { return this._div.disabled; }, setDisabled: function(d) { this._div.disabled = d; }, killIt: function() { StopObservers(this); try { this._div.parentNode.removeChild(this._div); } catch(e){} this._div = null; } } FlatControls.Window = Class.create(); //FlatControls.Window.prototype = Object.extend(new FlatControls.AbstractControl(), { FlatControls.Window.prototype = { initialize: function(id, winDiv) { winDiv.style.display = "block"; this._div = winDiv; this.id = id; var titleFound = false; for (var i=0; i" + htmlToValue(message) + ""+ "
" + "
";*/ win._contentDiv.innerHTML = "

" + htmlToValue(message) + "
"+ "

" + "

"; win.show(); win.setHeight(getPos($(win.id + ".msgDiv")).height + getPos($(win.id + ".buttomDiv")).height + (win.isIE?40:60)); win.setTitle(title!=null?title:Locale.ERROR); win.toCenterPos(); $(win.id + ".okBtn").focus(); } function yesNoDialog(win,message,okFunction) { win._div.style.left = (window.screen.availWidth - win._div.style.width.replace("px",""))/2; win._div.style.top = (window.screen.availHeight - win._div.style.height.replace("px","")-200)/2; win._contentDiv.innerHTML = "

" + htmlToValue(message) + "
"+ "
" + ""+ "
"; win.show(); win.setTitle(""); win.setHeight(getPos($(win.id + ".msgDiv")).height + getPos($(win.id + ".buttomDiv")).height + (win.isIE?50:60)); win.toCenterPos(); //$(win.id + ".okBtn").focus(); } FlatControls.NavigatorWindow = Class.create(); Object.extend(Object.extend(FlatControls.NavigatorWindow.prototype,FlatControls.Window.prototype), { initialize: function(id, contentDiv) { FlatControls.Window.prototype.initialize.call(this,id, contentDiv); }, open: function(url) { wait(); new Ajax.Request(url,{method: 'GET',evalScripts:false, onComplete: this._setContent.bind(this), onFailure: errorMsg}); }, _changeLinks: function() { var arr=this._contentDiv.getElementsByTagName("A"); var re = new RegExp(/( *)javascript:.*/); for (var i=0; i","gim")); var t2Idx = b.search(new RegExp("","gim")); if (t1Idx>-1 && t2Idx>-1) { this.setTitle(b.substring(t1Idx,t2Idx).replace(new RegExp("()","gim"),"")); } var s=b.search(new RegExp("","gim")); var e=b.search(new RegExp("","gim")); if (s>-1 && e>-1) { b = b.substring(s,e); b=b.replace(new RegExp("()|()|()|<\/form *>","gim"),""); } this._contentDiv.innerHTML = b; this._changeLinks(); } }); FlatControls.calendarPanelStyles = {div: "flat-calendar-div", table:"flat-calendar-table", dayTitle:"flat-calendar-day-title", weekTitle:"flat-calendar-week-title", workDay: "flat-calendar-work-day", holiday:"flat-calendar-holiday", weekTitleHighlight:"flat-calendar-week-title-highlight", workDayHighlight: "flat-calendar-work-day-highlight", holidayHighlight:"flat-calendar-holiday-highlight", prevMonth: "flat-calendar-prev-month", selected:"flat-calendar-selected", changeMonthButton: "flat-calendar-change-month-button", changeMonthButtonHighlight: "flat-calendar-change-month-button-highlight", monthDiv: "flat-calendar-month-div"}; FlatControls.CalendarPanel = Class.create(); FlatControls.CalendarPanel.prototype = Object.extend(new FlatControls.AbstractControl(), { initialize: function(id,owner,cDate,styles,daySelect,weekSelect,workWeekSelect,showMonth,showYear,changeMonth) { FlatControls.AbstractControl.prototype.initialize.call(this,id, owner); this.cDate = cDate!=null?cDate:new Date(); this.styles = styles!=null?styles:FlatControls.calendarPanelStyles; this.allowDaySelect = daySelect!=null?daySelect:true; this.allowWeekSelect = weekSelect!=null?weekSelect:true; this.allowWorkWeekSelect = workWeekSelect!=null?workWeekSelect:true; this.showMonth = showMonth!=null?showMonth:true; this.showYear = showYear!=null?showYear:true; this.changeMonth = changeMonth!=null?changeMonth:true; this._skeleton(); this._fillCells(this.cDate); }, _skeleton: function() { this.setHeight(164); this.setWidth(200); this.setPosition("absolute"); this._div.className = this.styles.div; this._table = $c(this._div,"TABLE"); this._table.className = this.styles.table; this._table.cellSpacing = 1; this._table.cellPadding = 0; this._table.border = 0; new LocalEventWrapper(this._table,"click",this._onclick,this); var currentRow = 0; if (this.showMonth || this.showYear) { var mselTR=this._table.insertRow(currentRow); var mselTD = mselTR.insertCell(0); mselTD.colSpan = 8; var titleTable = $c(mselTD,"TABLE"); titleTable.className = this.styles.table; titleTable.cellSpacing = 1; titleTable.cellPadding = 0; titleTable.width = "100%"; var tTr=titleTable.insertRow(0); this._ltButton=tTr.insertCell(0); this._ltButton.className = this.styles.changeMonthButton; this._ltButton.innerHTML = "<"; new Highlighter(this._ltButton, this.styles.changeMonthButtonHighlight,this); this.monthDiv=tTr.insertCell(1); this.monthDiv.className = this.styles.monthDiv; this._gtButton=tTr.insertCell(2); this._gtButton.className = this.styles.changeMonthButton; this._gtButton.innerHTML = ">"; new Highlighter(this._gtButton,""+ this.styles.changeMonthButtonHighlight,this); currentRow++; } var h=this._table.insertRow(currentRow); for (var i=0; i<8; i++) { var d=h.insertCell(i); if (i>0) { d.className = this.styles.dayTitle; d.innerHTML = Locale.DAY_TITLES_SHORTTEST[i-1]; } else { d.className = this.styles.weekTitle; } } currentRow++; for(var row=0; row<6; row++) { var tr=this._table.insertRow(row+currentRow); for (var col=0; col<8; col++) { var d=tr.insertCell(col); } } }, _fillCells: function(cDate) { this.cDate = cDate; if (this.showMonth || this.showYear) { this.monthDiv.innerHTML = (this.showMonth!=null?Locale.MONTHS_FULL[cDate.getMonth()]:"") + (this.showYear!=null?(" "+cDate.getYear2()):""); } var curMonth = new Date(this.cDate.getYear2(),this.cDate.getMonth(),1); var weekNum = curMonth.getWeekNumber(); curMonth.setDate(-(curMonth.getDay2()-1)); var dnum = curMonth.getDate(); var monthLen = curMonth.monthLength(); var isCurMonth = curMonth.getMonth()==this.cDate.getMonth(); var maxWeeks = new Date(this.cDate.getYear2(),11,31).getWeekNumber(); for(var row=0; row<6; row++) { for (var col=0; col<8; col++) { var d = this._table.rows[row + ((this.showMonth || this.showYear)?2:1)].cells[col]; if (col==0) { d.className = this.styles.weekTitle + (this.allowWeekSelect || this.allowWorkWeekSelect?" hand":""); d.innerHTML = weekNum; weekNum = (weekNum==maxWeeks?1:weekNum+1); } else { d.className = (col<6?this.styles.workDay:this.styles.holiday)+(this.allowDaySelect?" hand":"") + (isCurMonth?"":" "+this.styles.prevMonth); d.innerHTML = dnum; if (dnum==monthLen) { dnum=1; curMonth.setDate(1); curMonth.setMonth(curMonth.getMonth()+1); monthLen = curMonth.monthLength(); isCurMonth = (curMonth.getMonth()==this.cDate.getMonth()); } else { dnum++; } } } } if (this.selectedDay) { this.selectDay(this.selectedDay); } else if (this.selectedWeek) { this.selectWeek(this.selectedWeek); } else if (this.selectedWorkWeek) { this.selectWorkWeek(this.selectedWorkWeek); } }, _cellClassName: function(row,col) { var dt = this._findDate(row,col); var isOtherMonth = dt!=null && this.cDate.getMonth()!=dt.getMonth(); return col==0?(this.styles.weekTitle + (this.allowWeekSelect || this.allowWorkWeekSelect?" hand":"")): (col<6?this.styles.workDay:this.styles.holiday)+(this.allowDaySelect?" hand":"") + (isOtherMonth?(" " + this.styles.prevMonth):""); }, _onclick: function(ew,ev) { for (var i=0; i-1) { for (var j=0; j<8; j++) { if (cursorPlacedOnElement(this._table.rows[i].cells[j],ev)) { if (j==0) { //selectweek if (this.allowWeekSelect) { this.selectWeek(this._findDate(i,j+1).getWeekNumber()); if (this.onchange) { this.onchange(this.selectedWeek); } } else if (this.allowWorkWeekSelect) { this.selectWorkWeek(this._findDate(i,j+1).getWeekNumber()); if (this.onchange) { this.onchange(this.selectedWorkWeek); } } } else { //selectday var selectedDate = this._findDate(i,j); if (selectedDate.getMonth()==this.cDate.getMonth()) { this.selectDay(selectedDate); if (this.onchange) { this.onchange(selectedDate); } } } } } } } } } }, _findCell: function(vle) { var firstDay = new Date(this.cDate.getYear2(),this.cDate.getMonth(),1); var prevFirstDay = firstDay.setDate(-(firstDay.getDay2()-1)); var dte = new Date(vle.getYear2(),vle.getMonth(),vle.getDate()); var days=Math.round((dte-prevFirstDay)/(1000*60*60*24)); if (days<0 || days>7*6) { return null; } return {row:(days - days%7)/7 + ((this.showMonth || this.showYear)?2:1),col:days%7+1}; }, _findDate: function(row,col) { if ((row-((this.showMonth || this.showYear)?2:1))<0 || col<1) { return null; } var firstDay = new Date(this.cDate.getYear2(),this.cDate.getMonth(),1); firstDay.setDate(-(firstDay.getDay2()-1)); firstDay.setDate(firstDay.getDate() + (row-((this.showMonth || this.showYear)?2:1))*7 + col-1); return firstDay; }, _findRow: function(week) { var firstDay = new Date(this.cDate.getYear2(),this.cDate.getMonth(),1); var dte=this._findDate(week - firstDay.getWeekNumber() + ((this.showMonth || this.showYear)?2:1),1); if (dte!=null) { var row=week - firstDay.getWeekNumber() + ((this.showMonth || this.showYear)?2:1); if (week - firstDay.getWeekNumber()>-1 && week - firstDay.getWeekNumber()<6) { return row; } else { return null; } } }, selectDay: function(dte) { this.deselect(); this.selectedDay = dte; if (this.allowDaySelect && dte!=null && dte.getYear2()==this.cDate.getYear2() && dte.getMonth()==this.cDate.getMonth()) { var cell=this._findCell(dte); if (cell) { this._table.rows[cell.row].cells[cell.col].className = this.styles.selected; } } }, selectWeek: function(weekNum) { this.deselect(); this.selectedWeek = weekNum; if (weekNum!=null && this._findRow(weekNum)!=null) { this._selectDays(this._findRow(weekNum),7,true); } }, selectWorkWeek: function(weekNum) { this.deselect(); this.selectedWorkWeek = weekNum; if (weekNum && this._findRow(weekNum)!=null) { this._selectDays(this._findRow(weekNum),5,true); } }, getPeriod: function() { if (this.selectedDay!=null) { return {from: this.selectedDay, to: new Date(this.selectedDay.getYear2(),this.selectedDay.getMonth(),this.selectedDay.getDate()+1)}; } else if (this.selectedWeek!=null || this.selectedWorkWeek!=null) { var from = new Date(this.cDate.getYear2(),0,1).OtherWeek(this.selectedWeek!=null?this.selectedWeek:this.selectedWorkWeek); return {from:from,to: new Date(from.getYear2(),from.getMonth(),from.getDate() + (this.selectedWeek!=null?7:5))}; } else { return null; } }, setPeriod: function(period) { if (period==null || period.from==null || period.to==null) { return; } var days = period.to.daysRange(period.from); if (days==1 && this.allowDaySelect) { this.selectDay(period.from); } else if (days==7 && this.allowWeekSelect) { this.selectWeek(period.from.getWeekNumber()); } else if (days==5 && this.allowWorkWeekSelect) { this.selectWorkWeek(period.from.getWeekNumber()); } else { this.deselect(); } this._fillCells(period.from); }, deselect: function() { if (this.selectedDay) { var cell=this._findCell(this.selectedDay); if (cell!=null) { this._table.rows[cell.row].cells[cell.col].className = this._cellClassName(cell.row,cell.col); } this.selectedDay = null; } if (this.selectedWeek && this._findRow(this.selectedWeek)) { this._selectDays(this._findRow(this.selectedWeek),7,false); this.selectedWeek = null; } if (this.selectedWorkWeek && this._findRow(this.selectedWorkWeek)) { this._selectDays(this._findRow(this.selectedWorkWeek),5,false); this.selectedWorkWeek = null; } }, _selectDays: function(row,cols,select) { var tr = this._table.rows[row]; for(var i=1; i<=cols; i++) { tr.cells[i].className = select?this.styles.selected:this._cellClassName(row,i); } }, onDayClick: function(eventWrapper) { var d=new Date(this.cDate.getYear2(),this.cDate.getMonth(),eventWrapper.value); this.selectDay(d); if (this.onchange) { this.onchange(d); } }, onWeekClick: function(eventWrapper) { if (this.allowWeekSelect) { this.selectWeek(eventWrapper.value); } else { this.selectWorkWeek(eventWrapper.value); } if (this.onchange) { this.onchange(eventWrapper.value); } } }); //=============================FlatControls.DateCombobox FlatControls.DateInput = Class.create(); FlatControls.DateInput.prototype = { initialize: function(input) { this.id = input.id; this.input = input; this.calendar = new FlatControls.CalendarPanel(this.id + ".calendar",document.body,null,null,true,false,false); this.calendar.onchange = this._onselect.bind(this); var p=this.input.parentNode; var a = document.createElement("A"); var searchFlag, inserted = false; for (var i=0; i (document.body.offsetHeight>0?document.body.offsetHeight:600)) { this.calendar.setTop(pos.top - scroll.top - cpos.height + (this.isIE?1:0)); } else { //alert(pos.top + ":" + (pos.top - scroll.top + this._height- (this.isIE?1:0))); this.calendar.setTop(pos.top - scroll.top + pos.height+1); } this.calendar.setLeft(pos.left); }, _onbuttonclick: function(ew,ev) { if (this.listDischarge) { this.calendar.hide(); } else { this.calendar.show(); this._setCalendarPos(); var vle = this.stringToDate(this.input.value); this.calendar.selectDay(vle!=null?vle:new Date()); this.calendar._fillCells(vle!=null?vle:new Date()); } this.listDischarge = !this.listDischarge; }, _onselect: function(dte) { this.setValue(dte); this.listDischarge = false; this.calendar.hide(); if (this.onchange!=null) { this.onchange(dte); } }, _bodyclick: function(_this,ev) { if (this.listDischarge && (getPos(this.calendar._div).left!=0 || getPos(this.calendar._div).top!=0)) { if (!cursorPlacedOnElement(this.calendar._div,ev) && ((this.button!=null && !cursorPlacedOnElement(this.button,ev)) || this.button==null) //&& /*(this._style == "menu" || (this.mode=="combo" && !cursorPlacedOnElement(this._input,ev)) || this.mode!="combo")*/) { this.calendar.hide(); this.listDischarge = false; } } }, stringToDate: function(vle) { var str = vle; if (str==null || str.length==0) { return null; } var rx=new RegExp('^(\\d{1,2})\.(\\d{1,2})\.(\\d{4})\\s*$' ); if (rx.test(str)) { var sDay = new Number(str.substring(0,str.indexOf("."))); str = str.substring(str.indexOf(".")+1,str.length); var sMonth = new Number(str.substring(0,str.indexOf("."))); var sYear = new Number(str.substring(str.indexOf(".")+1,str.length)); return new Date(sYear,sMonth-1,sDay); } else { return null; } }, getValue: function() { return this.stringToDate(this.input.value); }, setValue: function(vle) { this.input.value = (vle instanceof Date)? ((vle.getDate()<9?"0":"") + vle.getDate() + "." + (vle.getMonth()<9?"0":"") + (vle.getMonth() + 1) + "." + vle.getYear2()): ""; }, inputBlur: function(enterDown) { var str = this.input.value; var dte=this.stringToDate(str); /*if (dte==null) { if (str!=null && str.length>0) { try { this.listDischarge = true; this.calendar.show(); this._setCalendarPos(); this.input.focus(); } catch(e) {} } else { this.listDischarge = false; this.calendar.hide(); } } */ } } var FlatGrid = {}; FlatGrid.BaseGrid = function() {}; FlatGrid.BaseGrid.prototype = { initialize: function(id, owner,rowsCount,height) { this.id = id; this.owner = $(owner); this.height = height; this.rowHeight = 20; this.titleHeight = 20; this.rowsCount = rowsCount; this.columns = []; this.mainTable = $c(this.owner,"TABLE"); this.mainTable.border=0; this.mainTable.cellSpacing = 0; this.mainTable.cellPadding = 0; var titleTr = this.mainTable.insertRow(0).insertCell(0); titleTr.className = "border"; this.titleTable = $c(titleTr,"table"); this.titleTable.insertRow(0); this.titleTable.className = "flatGrid-title-table"; var dataTr = this.mainTable.insertRow(1).insertCell(0); this.dataDiv = $c(dataTr,"div"); this.dataDiv.className = "vertical-scroll"; this.dataDiv.style.width = 600; this.dataDiv.style.height = height-this.titleHeight; //this.dataDiv.style.position ="absolute"; this.dataTable = $c(this.dataDiv,"table"); this.dataTable.className = "flatGrid-data-table"; for (var i=0; i= 0; new LocalEventWrapper(this.titleTable,"click",this._onTitleTableClick,this); new LocalEventWrapper(this.dataTable,"click",this._onDataTableClick,this); new LocalEventWrapper(this.titleTable,"mouseup",clearSelection,this); new LocalEventWrapper(this.dataTable,"mouseup",clearSelection,this); }, setWidth: function(width) { var rp=width/(getPos(this.dataDiv).width-28); var w = 0; for (var i=1; iev.clientY) { row = i; break; } } /*for (var i=0; iev.clientX) { col = i; } } */ var col; for (var i=0; ic.left && ev.clientXc.left && ev.clientX0) { body += "&"; } body +=this.id + ".multiselect=" + this.data[i][0]; } } return body; }, haveSelected: function() { return this._muiltiselectStr().length>0 || (this.isAllowRowSelect() && this.getSelectedObjectId()!=null); }, doDeleteRows: function() { if (!this.isAllowMultiselect()) { return; } this.call("doDelete","",true); }, call: function(action,params,multiselect) { var body = this.id + ".action=" + action; if (params!=null) { body += "&" + params; } if (multiselect) { var p=this._muiltiselectStr(); if (p.length>0) { body+="&" + this._muiltiselectStr(); } else if (this.isAllowRowSelect() && this.getSelectedObjectId()!=null) { body+=this.id + ".multiselect=" + this.getSelectedObjectId(); } else { body+=this.id + ".multiselect=null"; } } wait(); var ajax = new Ajax.Request(this.updateUrl,{method: 'POST', postBody: body,evalScripts:false, onComplete: exec, onFailure: errorMsg}); }, updateModel: function(updates) { if (updates.dataSource) { this.setData(updates.dataSource); } if (updates.pageNum!=null && updates.pageCount!=null) { this.pageSwitcher.setValues(updates.pageNum,updates.pageCount); } else if (updates.pageCount!=null) { this.setPageCount(updates.pageCount); } else if (updates.pageNum!=null) { this.setPageNum(updates.pageNum); } if (updates.selectedObjectId!=null) { this.setSelectedObjectId(updates.selectedObjectId); } else if (updates.dataSource) { this.setSelectedObjectId(this.selectedObjectId); } if (updates.state!=null) { this.setState(updates.state); } if (updates.sortMode!=null) { this.setSortByColumn(updates.sortByColumn,updates.sortMode); } } }); FlatGrid.EditableGrid = Class.create(); FlatGrid.EditableGrid.prototype = Object.extend(new FlatGrid.Grid(), { initialize: function(id, owner,rowsCount,height,updateUrl) { FlatGrid.Grid.prototype.initialize.call(this,id, owner,rowsCount,height,updateUrl); this._currentEditorPos = null; this._currentEditorData = null; this.allowEdit = false; }, isAllowEdit: function() { return this.allowEdit; }, setAllowEdit: function(allowEdit) { this.allowEdit = allowEdit; }, addColumn: function(column,index) { FlatGrid.Grid.prototype.addColumn.call(this,column,index); if (column.control!=null && this.allowEdit && this._isDataEnough() && this._currentEditorData) { //this.setEditor(this._currentEditorData); } }, setData: function(data) { FlatGrid.Grid.prototype.setData.call(this,data); if (this._isDataEnough()) { //this.setEditor(this._currentEditorData); } else { this.setEditor(null); } }, setState: function(state) { FlatGrid.Grid.prototype.setState.call(this,state); if (this._isDataEnough()) { //this.setEditor(this._currentEditorData); } else { this.setEditor(null); } }, setSelectedObjectId: function(id) { FlatGrid.Grid.prototype.setSelectedObjectId.call(this,id); if (id!=this.selectedObjectId || this.selectedObjectId==null || id==null) { this.setEditor(null); } }, setEditor: function(values) { if (!this.allowEdit) { return; } if (this._currentEditorPos!=null) { for (var i=0; i0) { body += "&"; } if (this.columns[i].getControl()!=null && !this.columns[i].getControl().isReadOnly()) { body +=this.id + ".inputObj." + this.columns[i].id + "=" + this.columns[i].getControl().getValue(); } } if (this.state==1) { //ToDo: currentRow? body += "&" + this.id + ".currentRow.slectedObjectId=" + this.slectedObjectId; } //ToDo compile form this.call(this.state==1?"doUpdate":"doSave",body); } }, _isDataEnough: function() { return ((this.state==1 && this.selectedObjectId!=null) || (this.state==2)) && this._currentEditorData!=null && this.allowEdit; }, _getEditorRowIndex: function() { var row = null; if (this.state==1 && this.selectedObjectId!=null) { row=this._searchRowById(this.selectedObjectId); if (row==-1) { return null; } return row; } else if (this.state==2) { if (this.data.length"; } else { return ""; } } }); FlatGrid.PageSwitcher = Class.create(); FlatGrid.PageSwitcher.prototype = { initialize: function(id, owner, pageNum, pageCount) { this.id = id; this.owner = $(owner); this.table = $c(this.owner,"TABLE"); this.table.cellSpacing = 2; this.table.border=0; this.table.insertRow(0); new LocalEventWrapper(this.table,"click",this._onClick,this); this._cellCount = 0; this._cellIndex = 0; this.setValues(pageNum,pageCount); }, _onClick: function(_this,ev) { var col; for (var i=0; ic.left && ev.clientX1) { prevPage--; } if (pageNum1) { //var a=this._A(sDiv,"changePage",this.gridId + ".pageNum=" + prevPage); c=this._nextCell("flat-grid-psw"); c.pageNum = prevPage; c.innerHTML = "<< "; } lastPage = pageNum + 3; if (lastPage > pageCount) { lastPage = pageCount; } if (lastPage > 3) { firstPage = lastPage - 3; } else { firstPage = 1; } if (firstPage < 3) { firstPage = 1; lastPage = 5; } else { c=this._nextCell("flat-grid-psw"); c.pageNum = 1; //var a=this._A(sDiv,"changePage",this.gridId + ".pageNum=1"); c.innerHTML = "1"; c=this._nextCell(""); c.innerHTML = " ... "; } if (pageCount - lastPage < 2) { lastPage = pageCount; } for (i = firstPage; i <= lastPage; i++) { if (i == pageNum) { c=this._nextCell("flat-grid-psw-highlight"); c.innerHTML = i + " "; } else { //var a=this._A(sDiv,"changePage",this.gridId + ".pageNum=" + i); c=this._nextCell("flat-grid-psw"); c.pageNum = i; c.innerHTML = i; } } if (pageCount - lastPage >= 2) { c=this._nextCell(""); c.innerHTML = " ... "; //var a=this._A(sDiv,"changePage",this.gridId + ".pageNum=" + this.model.pageCount); c=this._nextCell("flat-grid-psw"); c.pageNum = pageCount; c.innerHTML = pageCount; } if (pageNum"; }, getValue: function() { if (this.input!=null) { if (this.input.checked) { return "on"; } else { return "off"; } } else { return this.value; } }, setValue: function(value) { this.value = value; if (this.input!=null) { this.input.checked = (value=="on"); } }, focus: function() { if (this.input && this.input.style.display=="inline") { try { this.input.focus(); } catch(e){} } }, getOwner: function() { return this.owner; }, setOwner: function(owner) { if (owner==null && this.owner!=null) { this.owner.innerHTML = " "; this.input = null; } if (owner!=null) { this.owner = owner; this.owner.innerHTML = ""; this.input = document.createElement("INPUT"); this.input.type = "checkbox"; this.owner.appendChild(this.input); this.input.style.display = "none"; this.input.className = "flat-grid-input"; this.input.checked = (this.value=="on"); //this.input.style.width = this.column.width-4; this.input.style.height = this.column.grid.rowHeight-2; this.input.style.display = "inline"; } } }); FlatGrid.SelectControl = Class.create(); FlatGrid.SelectControl.prototype = Object.extend(new FlatGrid.AbstractControl(), { initialize: function(id,items) { this.id = id; this.select = null; this.items = items; }, dataToCell: function(value) { /* if (value!=null && value>-1 && value"). replace(/&/gim,"&"). replace(/"/gim,"\""). replace(/
/gim,"\n"):str; } function htmlAsInjection(html) { var s=html.search(new RegExp("","gim")); var e=html.search(new RegExp("","gim")); if (s>-1 && e>-1) { html = html.substring(s,e); html=html.replace(new RegExp("()|()|()|<\/form *>","gim"),""); } return html; } function isIE() { return navigator.userAgent.toLowerCase().indexOf("msie") >= 0; } function getBrowserName() { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1) { return "msie" } if (ua.indexOf("opera") != -1) { return "opera" } if (ua.indexOf("gecko") != -1) { return "gecko"; } if (ua.indexOf("safari") != -1) { return "safari"; } if (ua.indexOf("konqueror") != -1) { return "konqueror"; } return "unknown"; } function request(url,body) { wait(); new Ajax.Request(url,{method: 'POST', postBody: body,evalScripts:false, onComplete: exec, onFailure: errorMsg}); } function exec(transport, object) { //alert(transport.responseText); try { eval(transport.responseText); } catch(e) { alert(e.description); alert(transport.responseText); } nowait(); } function errorMsg(transport, object) { if (alertWin) { messageBox(alertWin,"
  • " + Locale.TRANSPORT_ERROR + ": " + transport.status + "
"); } else { alert(Locale.TRANSPORT_ERROR + ": " + transport.status); } } function alertExt(message, title, color) { if (alertWin!=null) { messageBox(alertWin,"" + message + "", title); } else { alert(message); } } function findOutsideElements(tagName,outsideElement) { var elems=document.body.getElementsByTagName(tagName); var result = []; for (i=0; i=100) { var test = new Date(2000,0,1); var offset = 2000-test.getYear(); } else { offset = 1900; } return this.getYear() + offset; } Date.prototype.getDay2 = function() { return (this.getDay()+6)%7; } Date.prototype.daysRange = function(date) { return Math.round((this - date)/(1000*60*60*24)); } Date.prototype.OtherDay = function(day) { return new Date(this.getYear2(),this.getMonth(),day); } Date.prototype.OtherWeek = function(week) { var firstDay = new Date(this.getYear2(),0,1); return new Date(this.getYear2(),0,(week-1)*7 - firstDay.getDay2()+1); } Date.prototype.getWeekNumber = function() { var first=new Date(this.getYear2(),0,1); var lastOfWeek = new Date(this.getYear2(),this.getMonth(),this.getDate() + 6-this.getDay2()); if (first==this) { return 0; } else { var days = ((lastOfWeek-first)/(1000*60*60*24)); if (days-Math.round(days)<0) { days = Math.round(days)-1; } else { days = Math.round(days); } days += first.getDay2(); //alert("2:" + days); return (days - (days % 7))/7+1; } } var MONTH_LENGTH = [31,28,31,30,31,30,31,31,30,31,30,31]; var LEAP_MONTH_LENGTH = [31,29,31,30,31,30,31,31,30,31,30,31]; Date.prototype.monthLength = function() { if (this.getYear2()%4 ==0 || this.getYear2()%100 ==0 || this.getYear2()%400 ==0) { return LEAP_MONTH_LENGTH[this.getMonth()]; } else { return MONTH_LENGTH[this.getMonth()]; } } Date.prototype.weekInMonth = function() { var c = this.monthLength() + new Date(this.getYear2(),this.getMonth(),1).getDay2(); var wim = (c - c%7)/7; if (c%7>0) { wim++; } return wim; } String.prototype.replaceAll = function(regexp,str) { var newStr = this; while (newStr.indexOf(regexp)>0) { newStr = newStr.replace(regexp,str); } return newStr; } function dateToRUString(date) { return date.getDate() + "." + date.getMonth() + "." + date.getYear2() + " " + date.getHours() + ":" + date.getMinutes(); } function DT2String(date) { if (date) { return (date.getDate()<9?"0":"") + date.getDate() + "." + (date.getMonth()<9?"0":"") + (date.getMonth()+1) + "." + date.getYear2() + " " + (date.getHours()<9?"0":"") + date.getHours() + ":" + (date.getMinutes()<9?"0":"") + date.getMinutes() + ":" + (date.getSeconds()<9?"0":"") + date.getSeconds(); } else { return ""; } } //=======================Array extensions============== Array.prototype.insert = function(item,index) { var res = []; res = res.concat(this.slice(0,index),[item],this.slice(index,this.length)) for (var i=0; iindex) { this[i-1]=this[i]; } } this.pop(); return this; } function setSelectValue(select,value) { var s = $(select); for (var i=0; i0) { for (i=0; i0) { body += "&"; } body += this.params[i].name + "=" + this.params[i].value; } } else if (this.form) { this.form.id = this.form.name; var body = Form.serialize(this.form); } errFunct = this.reportError; if (this.errorWindow) { errFunct = this.errorWindow; } wait(); var ajax = new Ajax.Request(this.url,{method: 'POST', postBody: body,evalScripts:false, onComplete: this.__onComplete, onFailure: errFunct}); }, __onComplete: function(transport, object) {eval(transport.responseText); nowait();}, reportError: function (transport, object) { alert("Error: " + transport.status); }, stopObserving: function() { this.eventWrapper.stopObserving(); this.owner = null; } } //==================================== Highlighter function Highlighter(owner,alterClassName,ownerClass) { this.owner = $(owner); this.alterClassName = alterClassName; this.normalClassName = this.owner.className; this.ownerClass = ownerClass; this.init(); } Highlighter.prototype = { init: function() { this.enabled = true; this.overEvent = new LocalEventWrapper(this.owner,"mouseover",this.onMouseenter,this); this.outEvent = new LocalEventWrapper(this.owner,"mouseout",this.onMouseout,this); if (this.ownerClass) { if (!this.ownerClass.observers) { this.ownerClass.observers = []; } this.ownerClass.observers.push(this); } }, onMouseenter: function() { if (this.enabled) { this.owner.className = this.alterClassName; } }, onMouseout: function() { if (this.enabled) { this.owner.className = this.normalClassName; } }, stopObserving: function() { this.overEvent.stopObserving(); this.outEvent.stopObserving(); this.owner = null; } } function clearSelection() { var sel; if(document.selection && document.selection.empty) { document.selection.empty(); } else if(window.getSelection) { sel = window.getSelection(); if(sel && sel.removeAllRanges) sel.removeAllRanges(); } } function fixLocalTime(vle) { if (vle==null) { return null; } var tmp = new Date(vle); return new Date(tmp.valueOf() + tmp.getTimezoneOffset()*60000); } function getCookie(name) { var prefix = name + "="; var cookieStartIndex = document.cookie.indexOf(prefix); if (cookieStartIndex == -1) { return null; } var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length); if (cookieEndIndex == -1) { cookieEndIndex = document.cookie.length; } return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex)); } function setCookie(name, value, expires, path, domain, secure) { var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); if ((name + "=" + escape(value)).length <= 4000) { document.cookie = curCookie; } } var JSON = JSON || {}; // implement JSON.stringify serialization JSON.stringify = JSON.stringify || function (obj) { var t = typeof (obj); if (t != "object" || obj === null) { // simple data type if (t == "string") obj = '"'+obj+'"'; return String(obj); } else { // recurse array or object var n, v, json = [], arr = (obj && obj.constructor == Array); for (n in obj) { v = obj[n]; t = typeof(v); if (t == "string") v = '"'+v+'"'; else if (t == "object" && v !== null) v = JSON.stringify(v); json.push((arr ? "" : '"' + n + '":') + String(v)); } return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); } }; // implement JSON.parse de-serialization JSON.parse = JSON.parse || function (str) { if (str === "") str = '""'; eval("var p=" + str + ";"); return p; }; var Locale = { DAY_TITLES_SHORTTEST: ["П", "В", "С", "Ч", "П", "С", "В"], DAY_TITLES: ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], DAY_TITLES_CUT: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], MONTHS: ["Янв.", "Февр.", "Март", "Апр.", "Мая", "Июня", "Июля", "Авг.", "Сент.", "Окт.", "Нояб.", "Дек."], MONTHS_FULL: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], MONTHS_FULL_GEN: ["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"], EVENT_POPUP_MENU: [{id:0,value:"Новое событие"}, {id:1,value:"Редактировать"}, {id:2,value:"Удалить событие"}], TRANSPORT_ERROR: "Ошибка передачи данных", CALENDAR_PERIOD_BUTTONS: [{title: "День",imgsrc: "/images/day1.gif",id: "day"}, {title: "Рабочая неделя",imgsrc: "/images/day5.gif",id: "workWeek"}, {title: "Неделя",imgsrc: "/images/day7.gif",id: "week"}, {title: "Месяц",imgsrc: "/images/day31.gif",id: "month"}], YES: "Да", NO: "Нет", ERROR: "Ошибка", UPLOADING: "Загрузка...", SURE_DELETE_QUESTION: "Вы действительно хотите удалить?", SURE_CLEAR_TRASH: "Вы действительно хотите очистить корзину?", EVENT_CATEGORYS: [{id:0,value:" "}, {id:1,value:"Встреча"}, {id:2,value:"Звонок"}, {id:3,value:"Совещание"}, {id:4,value:"Важные клиенты"}, {id:5,value:"Поставщики"}, {id:6,value:"День рождения"}, {id:7,value:"Отложенные дела"}, {id:8,value:"Личные данные"}], TASK_STATUS: [{id:0,value:"Требует выполнения"}, {id:1,value:"Выполняется"}, {id:2,value:"Выполнена"}, {id:3,value:"В ожидании"}, {id:4,value:"Отложена"} ], TASK_PRIORITY: [{id:0,value:"Нет приоритета"}, {id:1,value:"Высокий"}, {id:2,value:"Обычный"}, {id:3,value:"Низкий"}], MAIN_MENU: [{imgSel:"/images/PIMTab_s.gif",imgNoSel:"/images/PIMTab_ns.gif", items:[{id:"contacts",image:"/images/contacts.gif",text:"Контакты",url:"contacts"}, {id:"calendar",image:"/images/calendar.gif",text:"Календарь",url:"calendar"}, {id:"tasks",image:"/images/todo.gif",text:"Задачи",url:"task"}, {id:"notes",image:"/images/notes.gif",text:"Заметки",url:"note"}, {id:"help0",image:"/images/help.gif",text:"Справка",url:"help?tab=0"}]}, {imgSel:"/images/ServiceTab_s.gif",imgNoSel:"/images/ServiceTab_ns.gif", items:[{id:"profile",image:"/images/settings.gif",text:"Настройки",url:"profile"}, {id:"log",image:"/images/log.gif",text:"Журнал синхронизации",url:"log"}, /*{id:"recycle",image:"/images/recycle.gif",text:"Корзина",url:"recycle.do"},*/ {id:"help1",image:"/images/help.gif",text:"Справка",url:"help?tab=1"}]} ], PHONE_TYPES: [{id:0,value:"Добавить номер",simpleType:null}, {id:1,value:"Мобильный",simpleType:"CELL",def:true}, {id:2,value:"Мобильный (личный)",simpleType:"CELL;HOME"}, {id:3,value:"Мобильный (служебный)",simpleType:"CELL;WORK"}, {id:4,value:"Телефон",simpleType:"VOICE",def:true}, {id:5,value:"Телефон (служебный)",simpleType:"VOICE;WORK"}, {id:6,value:"Телефон (домашний)",simpleType:"VOICE;HOME"}, {id:7,value:"Факс",simpleType:"FAX",def:true}, {id:8,value:"Факс (служебный)",simpleType:"FAX;WORK"}, {id:9,value:"Факс (домашний)",simpleType:"FAX;HOME"}, {id:10,value:"Видеосвязь",simpleType:"VIDEO",def:true}, {id:11,value:"Видеосвязь (служебный)",simpleType:"VIDEO;WORK"}, {id:12,value:"Видеосвязь (домашний)",simpleType:"VIDEO;HOME"}, {id:13,value:"Пейджер",simpleType:"PAGER"}], EMAIL_TYPES: [{id:0,value:"Добавить E-mail",simpleType:null}, {id:1,value:"E-mail",simpleType:"OTHER",def:true}, {id:2,value:"E-mail (служебный)",simpleType:"WORK"}, {id:3,value:"E-mail (домашний)",simpleType:"HOME"}], URL_TYPES: [{id:0,value:"Добавить URL", simpleType:null}, {id:1,value:"Адрес в интернете",simpleType: "OTHER", def:true}, {id:2,value:"Сайт организации", simpleType:"WORK"}, {id:3,value:"Личная страница",simpleType:"HOME"}], ADDRESS_TYPES: [{id:0,value:"Добавить адрес", simpleType:null}, {id:1,value:"Адрес",simpleType: "OTHER", def:true}, {id:2,value:"Рабочий адрес", simpleType:"WORK"}, {id:3,value:"Домашний адрес",simpleType:"HOME"}], NAME_OR_FIO: "Фамилия/имя", PHONE: "Телефон", ORGANIZATION: "Организация", EMAIL: "E-mail", CONTACT_MANAGER_STYLES: [{id:0,value:"Карточки"}, {id:1,value:"Таблица"} ], ADD_CONTACT: "Новый контакт", ERROR_NO_SELECTED_OBJECT_FOR_EDIT:"Ничего не выбрано для редактирования.", RUS_CHAR: "абвгдеёжзийклмнопрстуфхцчшщъыьэюя", ALL_CONTACTS: "все", SUBJECT: "Тема", DEADLINE: "Срок выполнения", NO_SELECTED_OBJECT: "Ничего не выбрано для удаления.", DATE: "Дата", DEVICE_ID: "ID-устройства", CONTACTS: "Контакты", CALENDAR: "Календарь", TASKS: "Задачи", NOTES: "Заметки", SUCCESSFULY: "Успешно", COMPLETED_WITH_ERRORS: "ВЫПОЛНЕНО С ОШИБКАМИ", CHENGE_PASSWORD: "Изменить пароль", NOT_SET: "не установлен", SET_BASIC_AUTH: "Задать параметры основной авторизации (имя/пароль)", SET: "установить", OPENID_SET_NOTES: "Вы можете указать свой OpenID для быстрой авторизации на этом сайте. Данный тип авторизации не может использоваться для синхронизации, и используется наряду с основной авторизацией по имени пользователя и паролю.", BASIC_AUTH_SET_NOTES: "Внимание! Для настройки SyncML-устройств необходимо задать имя пользователя и пароль. OpenID-авторизация может использоваться только для доступа на этот сайт.", LAST_SYNC: "Последняя синхронизация", SYNC_NEVER_EXECUTED: "синхронизация никогда не выполнялась", MORE: "дополнительно", YOU_HAVE_NO_DEVICES: "У вас нет синхронизируемых устройств. Необходимо произвести настройку телефона (или другого SyncML-устройства) и выполнить синхронизацию.", TIMEZONES: [{id:'Etc/GMT+12',offset:-12},{id:'Etc/GMT+11',offset:-11},{id:'Etc/GMT+10',offset:-10},{id:'US/Alaska',offset:-9},{id:'US/Pacific',offset:-8},{id:'US/Arizona',offset:-7},{id:'US/Mountain',offset:-7},{id:'US/Central',offset:-6},{id:'Etc/GMT+6',offset:-6},{id:'America/Mexico_City',offset:-6},{id:'Canada/Saskatchewan',offset:-6},{id:'US/Eastern',offset:-5},{id:'US/East-Indiana',offset:-5},{id:'America/Bogota',offset:-5},{id:'America/Caracas',offset:-4},{id:'America/Santiago',offset:-4},{id:'Canada/Atlantic',offset:-4},{id:'Canada/Newfoundland',offset:-3},{id:'America/Buenos_Aires',offset:-3},{id:'Brazil/East',offset:-3},{id:'Etc/GMT+2',offset:-2},{id:'Etc/GMT+1',offset:-1},{id:'Atlantic/Azores',offset:-1},{id:'ETC/GMT',offset:0},{id:'Etc/GMT-1',offset:1},{id:'Europe/Amsterdam',offset:1},{id:'Europe/Belgrade',offset:1},{id:'Europe/Brussels',offset:1},{id:'Europe/Warsaw',offset:1},{id:'Africa/Cairo',offset:2},{id:'Africa/Harare',offset:2},{id:'Asia/Jerusalem',offset:2},{id:'Europe/Athens',offset:2},{id:'Europe/Bucharest',offset:2},{id:'Europe/Riga',offset:2},{id:'Africa/Nairobi',offset:3},{id:'Asia/Baghdad',offset:3},{id:'Asia/Kuwait',offset:3},{id:'Europe/Moscow',offset:3},{id:'Asia/Tehran',offset:3},{id:'Asia/Baku',offset:4},{id:'EtAsia/Muscat',offset:0},{id:'Asia/Kabul',offset:4},{id:'Asia/Karachi',offset:5},{id:'Asia/Yekaterinburg',offset:5},{id:'Asia/Calcutta',offset:5},{id:'Asia/Katmandu',offset:5},{id:'Asia/Dacca',offset:6},{id:'Asia/Omsk',offset:6},{id:'Asia/Rangoon',offset:6},{id:'Asia/Bangkok',offset:7},{id:'Asia/Krasnoyarsk',offset:7},{id:'Asia/Hong_Kong',offset:8},{id:'Asia/Irkutsk',offset:8},{id:'Asia/Kuala_Lumpur',offset:8},{id:'Asia/Taipei',offset:8},{id:'Asia/Seoul',offset:9},{id:'Asia/Tokyo',offset:9},{id:'Asia/Yakutsk',offset:9},{id:'Australia/Adelaide',offset:9},{id:'Australia/Darwin',offset:9},{id:'Asia/Vladivostok',offset:10},{id:'Australia/Brisbane',offset:10},{id:'Australia/Canberra',offset:10},{id:'Australia/Hobart',offset:10},{id:'Pacific/Guam',offset:10},{id:'Asia/Magadan',offset:11},{id:'Asia/Kamchatka',offset:12},{id:'Pacific/Fiji',offset:12},{id:'Etc/GMT-13',offset:13}], DB_NAMES:[{uri:"con",name:"Контакты"},{uri:"task",name:"Задачи"},{uri:"note",name:"Заметки"},{uri:"cal",name:"Календарь"},{uri:"caltask",name:"Календарь и задачи"}], FIELD_NOT_SUPPORTED: "Это поле не поддерживается телефоном ", NEW_DEVICE_SETTINGS: "Настройка нового устройства", SYNC_DB_CON: "База контактов", SYNC_DB_CAL: "Календарь", SYNC_DB_TASK: "Задачи", SYNC_DB_CALTASK: "Календарь и задачи", SYNC_DB_NOTE: "Заметки", NOT_SUPPORTED: "Не поддерживается", SETTINGS_FOR: "Настройки для", AS_IS_AUTH_SETTINGS: "Как в настройках авторизации", SERVER_ADDRESS: "Адрес сервера", PORT: "Порт", LOGIN: "Имя пользователя", PASSWORD: "Пароль", BASIC_AUTH_SETTINGS_REQUIRED: "Для настройки телефона требуется установить имя пользователя и пароль основной авторизации.", ERORR_ENTER_PASSWORD: "Введите пароль", ERORR_ENTER_LOGIN: "Введите логин", CONTACTS_ACTUAL: "Актуальные контакты", CONTACTS_ALL: "Все контакты", CONTACTS_DUBLICATES: "Дубликаты", TRASH: "Корзина", ADD_NOTE: "Новая заметка", NOTE_EDITITNG: "Редактирование заметки", ADD_TASK: "Новая задача", TASK_EDITITNG: "Редактирование задачи", EVENTS: "События", ALL_DAY: "На весь день", FROM: "с", TO_DATE: "до", REPEATED_EVENT: "периодическое", REPEAT_TYPES: ["Не повторять", "Ежедневно", "Еженедельно", "Ежемесячно", "Ежегодно"], YOU_HAVE_NO_CONTACTS: "У вас нет данных в базе контактов", YOU_HAVE_NO_EVENTS_TODAY: "Сегодня нет событий", YOU_HAVE_NO_TASKS: "У вас нет незавершенных задач", MODULE_INIT_ERROR: "Не удалось загрузить модуль приложения. Проверьте сетевое подключение и обновите страницу.", VK_AUTH_CANCEL: "Не удалось авторизоваться. Вы отменили ввод пароля или произошла ошибка. Попробуйте обновить страницу и повторить попытку.", VK_AUTH_ERROR: "Ошибка авторизации. Попробуйте обновить страницу и повторить попытку.", VK_WAIT: "Жду данные с сервера \"В контакте\"", WAP4B_WAIT_CONTACTS: "Жду список контактов с WAP4B.ru", LIST_SYNC: "Синхронизация списков", VK_IMPORT_STATE_NEW: "Будет добавлен", VK_IMPORT_STATE_UPDATE: "Будет обновлён", VK_EMPTY_SELECTION: "Ничего не выбрано для импорта", VK_IMPORT_RESULT_TITLE: "Импорт данных успешно завершен.", VK_IMPORT_NEW: "добавлено новых:", VK_IMPORT_UPD: "обновлено:", VK_GET_FRIENDS_ERROR: "Не удалось получить список контактов с сервера vkontakte.ru", VK_IE7_NOT_SUPPORTED: "Ваша версия браузера устарела. Для корректной работы нужен IE8+ или последняя версия Opera/FireFox/Google chrome/Safari", ERROR_INVALID_MODULE_VERSION: "Версия устарела! Страница будет обновлена.", FILTER_ON: "Фильтр включен", FILTER_OFF: "Фильтр выключен" } FlatControls.Wait = Class.create(); FlatControls.Wait.prototype = Object.extend(new FlatControls.AbstractControl(), { initialize: function() { this._modalDiv = $c(document.body,"DIV"); this._modalDiv.className = "modal"; this._modalDiv.style.zIndex =10000; FlatControls.AbstractControl.prototype.initialize.call(this,"wait-div", this._modalDiv); this._div.style.position = "absolute"; this._div.style.height = 30; this._div.style.width = 150; this._div.className = "border form-default"; var img = $c(this._div,"IMG"); img.src = "/images/wait.gif"; img.style.width = "16"; img.style.height = "16"; img.align = "left"; this.infoArea= $c(this._div,"SPAN"); this.infoArea.style.paddingLeft = 10; this.infoArea.innerHTML = Locale.UPLOADING; this.stop(); }, start: function() { var deltaY = (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0).valueOf(); this._modalDiv.style.top = deltaY; this._modalDiv.style.display = "block"; this._div.style.left = (document.body.clientWidth - this._div.style.width.replace("px",""))/2; if (document.body.clientHeight==0) { this._div.style.top = 50; } else { this._div.style.top = (document.body.clientHeight - this._div.style.height.replace("px",""))/2; } this.isWait = true; }, stop: function() { this._modalDiv.style.display = "none"; this.isWait = false; } }); var waitObj = null; function wait(message) { if (waitObj==null) { waitObj = new FlatControls.Wait(); } waitObj.infoArea.innerHTML = message!=null?message:Locale.UPLOADING; if (waitObj.timer==null) { waitObj.timer=window.setTimeout(function() {waitObj.start();}, 3000); } } function nowait() { if (wait==null) { waitObj = new FlatControls.Wait(); } waitObj.stop(); window.clearTimeout(waitObj.timer); waitObj.timer=null; } FlatControls.CallbackExecuter = Class.create(); FlatControls.CallbackExecuter.prototype = { initialize: function(url, period) { this._url = url; this._stop = false; this.periodicalExecuter = new PeriodicalExecuter(this.callback.bind(this),period); }, callback: function() { if (!this._stop) { new Ajax.Request(this._url,{method: 'POST', postBody: "",evalScripts:false, onComplete: this.exec, onFailure: errorMsg, requestHeaders: ['callback','true']}); } }, stop: function() { this._stop = true; }, start: function() { this._stop = false; }, exec: function (transport, object) { try { eval(transport.responseText); } catch(e) { } //nowait(); } }; FlatControls.MainMenu = Class.create(); FlatControls.MainMenu.prototype = { initialize: function(id, owner, tabOwner, itemWidth, itemHeight) { FlatControls.AbstractControl.prototype.initialize.call(this,id, owner); this.itemWidth = itemWidth?itemWidth:110; this.itemHeight = itemHeight?itemHeight:90; this._div.style.display = "block"; //this._div.className = "border"; this._div.style.height = 110; this._div.style.width = ""; this._tabOwner = tabOwner; this.tabs = []; this.selectedPageIndex = 0; this.menu = {}; this.selectedMenuItem = null; }, addTab: function(imgSel,imgNoSel) { var idx = this.tabs.length; var img = $c(this._tabOwner,"IMG"); img.src = this.tabs.length==0?imgSel:imgNoSel; img._tabIndex = idx; var tabDiv = $c(this._div,"DIV"); tabDiv.style.display = this.tabs.length==0?"block":"none"; tabDiv.className = "form-default float-right"; //tabDiv.style.height = "100%"; tabDiv.style.width = this.itemWidth + 22; tabDiv.style.padding = 10; var p={img:img,div:tabDiv,menuItems:[],index:idx,imgSel:imgSel,imgNoSel:imgNoSel}; this.tabs.push(p) new LocalEventWrapper(img,"click",this._tabClick,this); return idx; }, getTab: function(idx) { return this.tabs[idx]; }, setPage: function(idx) { if (this.selectedPageIndex==idx) { this._showPage(this.selectedPageIndex,false); this.selectedPageIndex=null; if (this.onresize) { this.onresize(); } } else if (this.selectedPageIndex==null) { this.selectedPageIndex=idx; this._showPage(this.selectedPageIndex,true); if (this.onresize) { this.onresize(); } } else { this._showPage(this.selectedPageIndex,false); this.selectedPageIndex=idx; this._showPage(this.selectedPageIndex,true); } }, _showPage: function(idx,isShow) { var st=this.getTab(idx); st.div.style.display = isShow?"block":"none"; st.img.src = isShow?st.imgSel:st.imgNoSel; }, _tabClick: function(ew,event) { this.setPage(ew.owner._tabIndex); }, addMenuItem: function(tabIndex,id,image,text,url) { var tab=this.getTab(tabIndex); var menuItem={id:id,tabIndex:tabIndex}; menuItem.div = $c(tab.div,"DIV"); menuItem.div.style.width = this.itemWidth; menuItem.div.style.height = this.itemHeight; menuItem.div.style.padding = 10; menuItem.div.style.textAlign = "center"; menuItem.a = $c(menuItem.div,"A"); menuItem.a.href = url; menuItem.img = $c(menuItem.a,"IMG"); menuItem.img.src = image; menuItem.img.border = 0; menuItem.textDiv = $c(menuItem.div,"DIV"); menuItem.textDiv.innerHTML = text; this.menu[id] = menuItem; tab.menuItems.push(menuItem); }, selectMenuItem: function(id) { if (this.menu[id]==null) { return; } if (this.selectedMenuItem != null) { this.menu[this.selectedMenuItem].div.className = ""; } this.menu[id].div.className = "main-menu-selection"; this.selectedMenuItem = id; if (this.selectedPageIndex!=this.menu[id].tabIndex) { this.setPage(this.menu[id].tabIndex); } }, getSelectedPageIndex: function() { return this.selectedPageIndex; }, createMenu: function(arr) { for (i=0; i=skip && this.holders[i]!=null && this.holders[i].initialized) { last = i; i--; } if (last-skip>0 && (this.size==null || this.size==0 || this.size>skip) && this.requestData) { this.requestData(skip,last); } else if (this.onShowRange) { this.onShowRange(); } }, //Выполняет обновления видимой области после получения данных от сервера _execUpdate: function(transport) { var obj; try { eval("obj = " + transport.responseText ); } catch(ex) { alertExt(e.description + " " + transport.responseText); } this._setSize(obj.size); for (var i = 0; i< obj.data.length; i++) { this._setHolder(i + obj.skip,obj.data[i]); } if (this.setSelectedId && this.selectedId!=null) { this.setSelectedId(this.selectedId); } if (this.onShowRange) { this.onShowRange(); //$("rangeInfo").innerHTML = first + "-" + last + "/" + this.size; } }, //Устанавливает размер прокручиваемой области по числу элементов _setSize: function(size) { this.size = size; var cols=(this.width - this.width%this.holderWidth)/this.holderWidth; this.background.style.height = ((size - size%cols)/cols + (size%cols>0?1:0)) * this.holderHeight ; }, //Инициирует полное обновление данных refresh: function() { this.background.innerHTML = ""; this.holders = []; this._update(); }, //Возращает диапазон индексов видимых элементов _getVisibleRange: function() { var firstRow = (this._div.scrollTop - this._div.scrollTop%this.holderHeight)/this.holderHeight; var lastPos = this._div.scrollTop + this.height; var lastRow = ((lastPos - lastPos%this.holderHeight)/this.holderHeight) + (lastPos%this.holderHeight>0?1:0); var cols=(this.width - this.width%this.holderWidth)/this.holderWidth; return {first:firstRow*cols,last:(lastRow*cols)}; }, //Обработчик прокрутки _onScroll: function() { if (this.scrollTimerId!=null) { clearTimeout(this.scrollTimerId); } this.scrollTimerId=window.setTimeout(this._onScrollTimeout.bind(this),500); }, //Вызывает update если пользователь завершил прокрутку (закончился период ожидания) _onScrollTimeout: function() { clearTimeout(this.scrollTimerId); this.scrollTimerId=null; this._update(); }, _setHolder: function(position,obj) { }, _getCoord: function(position) { var cols=(this.width - this.width%this.holderWidth)/this.holderWidth; var row = (position - position%cols)/cols; var col = position%cols; return {left: col*this.holderWidth + 3 , top: row * this.holderHeight + 3}; } }); FlatControls.DropdownMenu = Class.create(); FlatControls.DropdownMenu.prototype = { initialize: function(span) { this.span = span; for (var i=0; i< span.childNodes.length; i++) { if (span.childNodes[i].tagName=="A") { this.button = span.childNodes[i]; } else if (span.childNodes[i].tagName=="DIV") { this.menu = span.childNodes[i]; } } if (this.button.href == "") { this.button.href ="javascript:void(null);"; } this.menu.style.position = "absolute"; //this.menu.style.position = "relative"; this.menu.style.left = 0; this.menu.style.top = 0; this.menu.style.display = "none"; //this.span.removeChild(this.menu); //document.body.appendChild(this.menu); var allA=this.menu.getElementsByTagName("A"); for (var i=0; idocument.body.clientHeight) { this.menu.style.top = this.button.offsetTop - cpos.height - scroll.top; } else { this.menu.style.top = this.button.offsetTop + pos.height -scroll.top; } this.menu.style.left = this.button.offsetLeft; } else { this.menu.style.display = "none"; } }, _onItemClick: function() { this.menu.style.display = "none"; } } FlatControls.PopupBlock = Class.create(); FlatControls.PopupBlock.prototype = { initialize: function(div) { this.div = div; this.div.style.position = "absolute"; //this.menu.style.position = "relative"; this.div.style.left = 0; this.div.style.top = 0; this.div.style.display = "none"; var allA=this.div.getElementsByTagName("A"); for (var i=0; i0) { this.setSelectedId(this.buttons[0].id); } }, _onItemClick: function(ew,ev) { for (var i=0; idocument.body.clientHeight) { this.menu.style.top = this.button.offsetTop - cpos.height - scroll.top; } else { this.menu.style.top = this.button.offsetTop + pos.height -scroll.top; } this.menu.style.left = this.button.offsetLeft - getPos(this.input).width; this.menu.style.width = getPos(this.input).width + getPos(this.button).width - (isIE()?0:2); var item = this.items[this.selectedId]; if (item!=null && item.tagName=="A") { item.style.backgroundColor = "#1A7BB4"; item.style.color = "#FFFFFF"; } } else { this.menu.style.display = "none"; } }, _onItemClick: function(ew) { this.menu.style.display = "none"; this.input.value = this.menu.getElementsByTagName("A")[ew.itemNum].innerHTML.replace(/<.*?>/gi, ""); this.setSelectedId(this.menu.getElementsByTagName("A")[ew.itemNum].id); }, getSelectedId: function() { return this.selectedId; }, setSelectedId: function(id) { var item = this.items[id]; if (item!=null && item.tagName=="A") { if (this.selectedId!=null) { var oldItem = this.items[this.selectedId]; if (oldItem!=null) { //oldItem.style.backgroundColor = "#FFFFFF"; //oldItem.style.color = "#1A7BB4"; oldItem.style.backgroundColor = ""; oldItem.style.color = ""; } } item.style.backgroundColor = "#1A7BB4"; item.style.color = "#FFFFFF"; this.selectedId = id; this.input.value = item.innerHTML.replace(/<.*?>/gi, ""); } }, _onMouseMove: function() { if (this.selectedId!=null) { var oldItem = this.items[this.selectedId]; if (oldItem!=null) { oldItem.style.backgroundColor = ""; oldItem.style.color = ""; } } } } FlatControls.TimeInput = Class.create(); Object.extend(Object.extend(FlatControls.TimeInput.prototype,FlatControls.FastInput.prototype),{ initialize: function(span) { FlatControls.FastInput.prototype.initialize.call(this,span); for (var i=0; i<48; i++) { var vle = i%2>0?( (((i-1)/2)<10?"0":"") + ((i-1)/2) + ":30"):( (i/2<10?"0":"") + (i/2) + ":00"); this.addItem(span.id + "." + i,vle); } //new LocalEventWrapper(this.input,"blur",this.inputBlur,this); }, getValue: function() { return this._stringToTime(this.input.value); }, setValue: function(vle) { this.input.value = vle!=null?this._timeToString(vle):""; }, getAsDate: function(date) { if (date==null) { return null; } var d = new Date(date.valueOf()); var vle = this.getValue(); if (vle==null || this.span.style.display=="none") { return d; } d.setHours(vle.hh); d.setMinutes(vle.mm); d.setSeconds(vle.ss); d.setMilliseconds(0); return d; }, setAsDate: function(date) { if (date==null) { this.input.value = ""; return; } this.setValue({hh:date.getHours(),mm:date.getMinutes(),ss:date.getSeconds()}); }, _timeToString: function(vle) { return (vle.hh<10?("0" + vle.hh):vle.hh) + ":" + (vle.mm<10?("0" + vle.mm):vle.mm) + (vle.ss==0?"":(vle.ss<10?(":0" + vle.ss):(":"+vle.ss))); }, _stringToTime: function(timeStr) { var hours = 0; var minutes = 0; var seconds = 0; if (timeStr) { var rx=new RegExp('^(\\d{1,2}):(\\d{1,2})(:(\\d{1,2}))?\\s*$' ); if (timeStr!=null && timeStr.length>0 && rx.test(timeStr)) { var str = timeStr; hours = new Number(str.substring(0,str.indexOf(":"))); str = str.substring(str.indexOf(":")+1,str.length); if (str.indexOf(":")>0) { minutes = new Number(str.substring(0,str.indexOf(":"))); seconds = new Number(str.substring(str.indexOf(":")+1,str.length)); } else { minutes = new Number(str); } return (hours<24 && minutes<60 && seconds<60)?{hh:hours,mm:minutes,ss:seconds}:null; } } return null; }, inputBlur: function() { var str = this.input.value; var time=this._stringToTime(str); if (time==null && this.allowEmpty) { if (time==null && str!=null && str.length>0) { try { this.input.focus(); this.input.value = "00:00"; this.menu.style.display = "none"; this._onButtonClick(); } catch(e) {} } else { this.menu.style.display = "none"; this.listbox.hide(); } } else if (!this.allowEmpty && time==null) { this.input.blur(); this.input.value = "00:00"; this.menu.style.display = "none"; this._onButtonClick(); } else { this.input.value = this._timeToString(time); this.menu.style.display = "none"; } } }); /* Copyright (c) 2006 Patrick Fitzgerald */ function tabberObj(argsObj) {var arg;this.div=null;this.classMain="tabber";this.classMainLive="tabberlive";this.classTab="tabbertab";this.classTabDefault="tabbertabdefault";this.classNav="tabbernav";this.classTabHide="tabbertabhide";this.classNavActive="tabberactive";this.titleElements=['h2','h3','h4','h5','h6'];this.titleElementsStripHTML=true;this.removeTitle=true;this.addLinkId=false;this.linkIdFormat='nav';for(arg in argsObj){this[arg]=argsObj[arg];} this.REclassMain=new RegExp('\\b'+this.classMain+'\\b','gi');this.REclassMainLive=new RegExp('\\b'+this.classMainLive+'\\b','gi');this.REclassTab=new RegExp('\\b'+this.classTab+'\\b','gi');this.REclassTabDefault=new RegExp('\\b'+this.classTabDefault+'\\b','gi');this.REclassTabHide=new RegExp('\\b'+this.classTabHide+'\\b','gi');this.tabs=new Array();if(this.div){this.init(this.div);this.div=null;}} tabberObj.prototype.init=function(e) {var childNodes,i,i2,t,defaultTab=0,DOM_ul,DOM_li,DOM_a,aId,headingElement;if(!document.getElementsByTagName){return false;} if(e.id){this.id=e.id;} this.tabs.length=0;childNodes=e.childNodes;for(i=0;i/gi," ");t.headingText=t.headingText.replace(/<[^>]+>/g,"");} break;}}} if(!t.headingText){t.headingText=i+1;} DOM_li=document.createElement("li");t.li=DOM_li;DOM_a=document.createElement("a");DOM_a.appendChild(document.createTextNode(t.headingText));DOM_a.href="javascript:void(null);";DOM_a.title=t.headingText;DOM_a.onclick=this.navClick;DOM_a.tabber=this;DOM_a.tabberIndex=i;if(this.addLinkId&&this.linkIdFormat){aId=this.linkIdFormat;aId=aId.replace(//gi,this.id);aId=aId.replace(//gi,i);aId=aId.replace(//gi,i+1);aId=aId.replace(//gi,t.headingText.replace(/[^a-zA-Z0-9\-]/gi,''));DOM_a.id=aId;} DOM_li.appendChild(DOM_a);DOM_ul.appendChild(DOM_li);} e.insertBefore(DOM_ul,e.firstChild);e.className=e.className.replace(this.REclassMain,this.classMainLive);this.tabShow(defaultTab);if(typeof this.onLoad=='function'){this.onLoad({tabber:this});} return this;};tabberObj.prototype.navClick=function(event) {var rVal,a,self,tabberIndex,onClickArgs;a=this;if(!a.tabber){return false;} self=a.tabber;tabberIndex=a.tabberIndex;a.blur();if(typeof self.onClick=='function'){onClickArgs={'tabber':self,'index':tabberIndex,'event':event};if(!event){onClickArgs.event=window.event;} rVal=self.onClick(onClickArgs);if(rVal===false){return false;}} self.tabShow(tabberIndex);return false;};tabberObj.prototype.tabHideAll=function() {var i;for(i=0;i