//Сборник функций для отображения карт и обновления рекламы в нужном div //var pic_path="pic/"; //путь к картам var banner_url="http://ww.hmn.ru/sv_bs/viewb.js?g=svali_right1&num=1&nb=1/1&s=1"; //URL баннера без случайного числа в конце var start_pic="img/play.gif"; var stop_pic="img/pause.gif"; var animation_in_p=0; var loaded = 0; // кол-во загруженных картинок var loadFailed = 0; // кол-во не загруженных картинок var imgIndex = 0; var img_src = ""; var img_ref = ""; var img = ""; var dbar= ""; var pic_counter = ""; var images = new Array(); var _isIE = -1; //Если 1, то IE, если 0 - то не IE по window.event var _isIE2 = -1; //Если 1, то IE, если 0 - то не IE по фильтрам var imageCount = 0; // сколько картинок всего нужно загрузить var animSpeed = 1000; //скорость смены кадров, в милисекундах var speed_quantity = 150; //единица увеличения или уменьшения скорости в милисекундах var slider_bar_length = 280; //карты - ширина полоски прокрутки в пикселях для вычисления смещения при прокрутке var slider_bar2_length = 50; //скорость - ширина полоски прокрутки в пикселях для вычисления смещения при прокрутке var SpeedCount = 10; //Сколько шагов для изменения скорости var mapSelCtr=0; //Кол-во кликов на картах или ещё где (для обновления рекламы) var timeout_state = null; var cur_map_index=-1; //Текущий индекс набора картинок var cur_save_index=0; //Индекс текущей картинки в наборе var cur_loaded_set=-1; //Индекс загруженного набора картинок var off_elements_true = true; //var target_div=""; //текущий div для RefreshAd() //function isIE() //{ // if (_isIE != -1) {return _isIE;} // else // { // if (window.event) _isIE = 1; // else _isIE = 0; // } // return _isIE; //} function isIE2() { if (_isIE2 != -1) {return _isIE2;} else { if (document.getElementById("mapimage_src").style.opacity=="") _isIE2 = 0; else _isIE2 = 1; } return _isIE2; } function SetFullImageState(index) { if (pic_fm_list[cur_map_index][index]) { img_src.style.cursor="pointer"; if (isIE2()) img_src.style.filter = ""; else img_src.style.opacity = 1; img_ref.href="javascript:show_full_pic('"+pic_path+pic_fm_list[cur_map_index][index]+"','"+pic_scales[cur_map_index]+"');"; //img_ref.target="_blank"; img_ref.target=""; img_src.title="Увеличить текущую карту"; } else { img_src.style.cursor="default"; if (isIE2()) img_src.style.filter = "alpha(opacity=30)"; else img_src.style.opacity = 0.3; img_ref.href="javascript:void(null);"; img_ref.target=""; img_src.title=""; } } function SetHRefStyle(ref_index) { if (IsDraggable) return; for (is=0; is0 ) { document.getElementById("StartStopButton").src = stop_pic; LoadMaps(pic_list[cur_map_index],cur_map_index,0); cur_loaded_set=cur_map_index; } else { stop(); } } function GetNextImage() { cur_save_index=imgIndex; imgIndex++; if (imgIndex >= imageCount) { imgIndex = 0; } } function animator(no_anim) { img.src = images[imgIndex].src; SetFullImageState(imgIndex); document.getElementById("pic_counter").innerHTML = (imgIndex+1)+"/"+imageCount; var sliderPos = parseInt(SliderUnit * imgIndex); dbar.style.marginLeft = sliderPos + "px"; //alert("anim:"+imgIndex); SetHRefStyle(imgIndex); if (no_anim) return; GetNextImage(); timeout_state = setTimeout("animator()", animSpeed); } function start() { document.getElementById("StartStopButton").src = stop_pic; animation_in_p=1; animator(0); } function stop() { document.getElementById("StartStopButton").src = start_pic; clearTimeout(timeout_state); animation_in_p=0; timeout_state = null; } //Делает видимыми и невидимыми нужные элементы плеера на время загрузки function SetVisStatusUntilLoading() { if (off_elements_true == false) return true; off_elements_true = false; clearTimeout(timeout_state1); timeout_state1 = null; document.getElementById("loading").style.display = "block"; document.getElementById("mapimage").style.display = "none"; document.getElementById("scale").style.display = "none"; document.getElementById("StartStop").style.visibility = "hidden"; document.getElementById("d_bar").style.visibility = "hidden"; } //Сжимает массив загруженных картинок, если какие-то из заказанных не загрузились function CondenseImageArray_old() { if (loadFailed > 0) { var i; var validImageCount = 0; for (i = 0; i < imageCount; i++) { if (images[i].complete == true) { images[validImageCount++] = images[i]; } } imageCount = validImageCount; } } function CondenseImageArray() { if (loadFailed > 0) { var i; for (i = 0; i < imageCount; i++) if (images[i].complete == false) { images[i].src = ""; } } } //Карты function BeginDrag(evt) { _evt = GetEventType(evt); if (!isIE2()) _evt.preventDefault(); position = parseInt(d_bar_shift.style.marginLeft); MouseXOffset = _evt.myx - position; IsDraggable = true; } //Скорость в основном файле! function EndDrag(evt) { if (!IsDraggable && !IsDraggable2) return false; if (IsDraggable) { IsDraggable=false; SetHRefStyle(imgIndex); } else if (IsDraggable2) { IsDraggable2=false; } } //Обновляет движок на полосе прокрутки при таскании function Drag(evt) { _evt = GetEventType(evt); if (IsDraggable) { Reindex(_evt.myx - MouseXOffset); } else if (IsDraggable2) { Reindex2(_evt.myx - MouseXOffset2); } return false; } //Определяет, какой тип айвента использовать - IE или Mozilla function GetEventType(evt) { _evt = evt ? evt : window.event; _evt.mysource = _evt.target ? _evt.target : _evt.srcElement; if (_evt.touches && _evt.touches.length==1) { var touch = _evt.touches[0]; _evt.myx = touch.pageX; _evt.myy = touch.pageY; } else { _evt.myx = _evt.pageX ? _evt.pageX : _evt.clientX + document.documentElement.scrollLeft; _evt.myy = _evt.pageY ? _evt.pageY : _evt.clientY + document.documentElement.scrollTop; } return _evt; } var MouseXOffset = 0; var MouseXOffset2 = 0; //Карты function Reindex(newXPosition) { var tempIndex; if (newXPosition < 0) tempIndex = 0; else if (newXPosition <= slider_bar_length) tempIndex = Math.round(newXPosition / SliderUnit); else tempIndex = imageCount - 1; if (tempIndex != imgIndex) { imgIndex = tempIndex; d_bar_shift.style.marginLeft = SliderUnit * imgIndex+"px"; img.src = images[imgIndex].src; pic_counter.innerHTML = (imgIndex+1)+"/"+imageCount; } cur_save_index=imgIndex; SetHRefStyle(imgIndex); SetFullImageState(imgIndex); } //Скорость function Reindex2(newXPosition2) { var tempIndex2; if (newXPosition2 < 0) tempIndex2 = 0; else if (newXPosition2 <= slider_bar2_length) tempIndex2 = Math.round(newXPosition2 / SliderUnit2); else tempIndex2 = SpeedCount; if (tempIndex2 != SpeedIndex) { SpeedIndex = tempIndex2; d_bar2_shift.style.marginLeft = SliderUnit2 * SpeedIndex+"px"; //установка скорости animSpeed=(SpeedCount*speed_quantity)-speed_quantity*SpeedIndex; } } //Плеер картинок с прокруткой var d_bar_shift; var d_bar2_shift; var IsDraggable = false; var IsDraggable2 = false; var sliderUnit; var SpeedIndex=3; var SliderUnit2=slider_bar2_length/SpeedCount; document.onmousemove = Drag; document.onmouseup = EndDrag; if (document.addEventListener) { document.addEventListener('touchend', EndDrag, false); document.addEventListener('touchmove', Drag, false); } function Player() { if (loaded + loadFailed == imageCount) { off_elements_true = false; clearTimeout(timeout_state1); timeout_state1 = null; CondenseImageArray(); document.getElementById("StartStop").style.visibility = "visible"; if (imageCount == 1) { document.getElementById("loading").style.display = "none"; document.getElementById("d_bar").style.visibility = "hidden"; document.getElementById("scale").style.display = "block"; document.getElementById("mapimage").style.display = "block"; document.getElementById("mapimage").src = images[0].src; SetFullImageState(cur_save_index); //alert("play:"+cur_save_index); SetHRefStyle(cur_save_index); } else { document.getElementById("d_bar").style.visibility = "visible"; document.getElementById("scale").style.display = "block"; document.getElementById("loading").style.display = "none"; document.getElementById("mapimage").style.display = "block"; // Инициализация возможности прокрутки if (imageCount > 1) { SliderUnit = slider_bar_length / (imageCount-1); } else { SliderUnit = 0; } Slider = document.getElementById("slider"); d_bar_shift = document.getElementById("d_bar"); d_bar_shift.onmousedown = BeginDrag; if (d_bar_shift.addEventListener) d_bar_shift.addEventListener('touchstart', BeginDrag, false); //document.onmousemove = Drag; //document.onmouseup = EndDrag; start(); } } } function ImageLoaded() { loaded++; remaining=imageCount-(loaded+loadFailed); document.getElementById("counter").innerHTML=" осталось "+remaining; Player(); } function ImageLoadFailed() { loadFailed++; remaining=imageCount-(loaded+loadFailed); document.getElementById("counter").innerHTML=" осталось "+remaining; Player(); } //Загружает карты в плеер //header_index - индекс в массиве заголовков для этого типа карт //cur_index - индекс карты в массиве карт, если это одна карта //img_list - массив карт или ссылка на одну карту //fm_img_refs - массив увеличенных карт, соотвествующих img_list по индексу function LoadMaps(img_list,header_index,cur_index) { img_src = document.getElementById("mapimage_src"); img_ref = document.getElementById("mapimage_ref"); img = document.getElementById("mapimage"); dbar = document.getElementById("d_bar"); pic_counter=document.getElementById("pic_counter"); stop(); if (cur_map_index!=-1 && pic_list[cur_map_index] && pic_list[header_index]) { if (pic_list[cur_map_index].length!=pic_list[header_index].length) { cur_save_index=0; cur_index=0; } } else { cur_save_index=0; cur_index=0; } cur_map_index=header_index; if (typeof img_list == 'string' && cur_loaded_set==cur_map_index) { cur_save_index=cur_index; imgIndex = cur_save_index; animator(1); return; } images = new Array(); imgIndex = cur_save_index; loaded = 0; loadFailed = 0; off_elements_true = true; timeout_state1 = setTimeout("SetVisStatusUntilLoading()", 100); document.getElementById("pic_counter").innerHTML = (cur_index+1)+"/"+pic_list[header_index].length; document.getElementById("map_header").innerHTML=""+pic_headers[header_index]+""; document.getElementById("mapimage").title="Карты погоды : "+pic_headers[header_index]; document.getElementById("scale").src=pic_scales[header_index]; start_map_links='Карта на  '; for(i = 0; i | ':'')+''+pic_links[header_index][i]+''; start_map_links=start_map_links+pic_types[header_index]+''; document.getElementById("map_links").innerHTML=start_map_links; if (typeof img_list == 'string') { imageCount=1; cur_save_index=cur_index; document.getElementById("counter").innerHTML=" осталось 1"; images[0] = new Image(); images[0].onload = ImageLoaded; images[0].onerror = ImageLoadFailed; images[0].src = pic_path+img_list; } else { //SetVisStatusUntilLoading(); imageCount = img_list.length; document.getElementById("counter").innerHTML=" осталось "+imageCount; var i; for(i = 0; i10000) return; animSpeed+=speed_quantity; } //Обновляет указанный рекламный блок в div с id=target через //number_of_clicks вызовов этой функции function AdCounter(number_of_clicks,target) { mapSelCtr++; if (mapSelCtr >= number_of_clicks) { mapSelCtr = 0; //RefreshAd(target); } } function set_blue_cursor(cur_map_index) { for (ib=0; ib<=max_maps_id; ib++) { set_cur_id="cur"+ib; set_obj=document.getElementById(set_cur_id); if (!set_obj) continue;; if (ib==cur_map_index) set_obj.style.visibility="visible"; else set_obj.style.visibility="hidden"; } } //Вызывает LoadMaps, произведя нужные действия function ShowMaps(key) { setCookie("map",key); set_blue_cursor(key); if (cur_map_index!=-1 && pic_list[cur_map_index] && pic_list[key]) if (pic_list[cur_map_index].length!=pic_list[key].length) cur_save_index=0; LoadMaps(pic_list[key][cur_save_index],key,cur_save_index); } //setTimeout(doNext(),5000);