// <![CDATA[
 var root = 'http://www.seonid.fr/';var im = 'http://www.seonid.fr/templates/images/';var areyousure = 'Are you sure?';var formerrort = 'Form elements marked in red are required or invalid !';var ero = 'Error';var closet = 'Close';var mousem = 'Bouger le curseur de ta souris ici'; var clickh = 'Cliquez ici'; var yourad = 'Votre publicité'; var closingin = 'En fermeture'; var secs = 'Seconds';var lightboximage = 'Image'; var lightboxof = 'de';var slto = 'Sliding Value To:'; var slch = 'Value Changed To:';var selectimages = 'Sélectionnez Images';var PHPSESSID = "1549130baa3fd343723b9900d8dd99e9";var creatingthumb = 'Générateur de Thumbnails...';var uplding = 'Uploading...';var thumbcreat = 'Créer thumbnail.';var alldone = 'Toutes les photos reçues.';var canceledt = 'Annulé';var stoppedt = 'Arrêté'; var isopera = false; var ischrome = false; var isff = false; var isie = false; var isie6 = false; var isie7 = false; var isie8 = false; if(navigator.userAgent.split('Opera').length == 2) isopera = true; else if(navigator.userAgent.split('Chrome').length == 2) ischrome = true; else if(navigator.userAgent.split('Firefox').length == 2) isff = true; else if(navigator.userAgent.split('MSIE').length == 2) { isie = true; var bv = parseInt(navigator.userAgent.split('MSIE')[1]); if(bv <= 6) isie6 = true; else if(bv == 7) isie7 = true; else if(bv == 8) isie8 = true; }; var d = document; var tempX = 0; var tempY = 0; var curH = 1; var hX = 0; var deffontSize = new Array(); var won = null; var acp = false; var wtime = 5; var witemwid = 0; var workwid = 0; var slmove = 0; var htime = 10; var hInt = 1; var hCount = 0; var sltime = 15; var sli = 0; var curp = 1; var deffontSize = new Array(); var effects = new Array(); var drags = new Array(); var cob = new Array(); var swfu = null; function initHeads() { if($('headline1')) { var heads = d.getElementsByClassName('headline'); hCount = heads.length; cob['heads'] = new PeriodicalExecuter(function(pe) { nextHead();} , htime); var hnum = d.getElementsByClassName('hnum'); for(var i=0;i<hnum.length;i++) for(var j=0;j<hCount;j++) { var nl = document.createElement('a'); nl.innerHTML = j+1; if(j == i) nl.className = 'on'; nl.onclick = function() { setHead(parseInt(this.innerHTML)); this.blur(); return false; }; hnum[i].appendChild(nl); } }; if($('hdemo1')) { var heads = d.getElementsByClassName('hdemo'); hCount = heads.length; for(var i=0;i<hCount;i++) { heads[i].setOpacity(0); heads[i].hide(); }; nextdHead(1, true); var hnum = d.getElementsByClassName('hnum1'); for(var i=0;i<hnum.length;i++) for(var j=0;j<hCount;j++) { var nl = document.createElement('a'); nl.innerHTML = j+1; if(j == i) nl.className = 'on'; nl.onclick = function() { nextdHead(parseInt(this.innerHTML)); this.blur(); return false; }; hnum[i].appendChild(nl); } } }; function nextdHead(i, init) { if(curH == i && !init) { cob['heads'].stop(); return; }; if(!init) { if(effects['fade'+curH]) effects['fade'+curH].cancel(); effects['fade'+curH] = new Effect.Fade('hdemo'+curH, {duration:0.5, from: 1, to: 0}); setTimeout('$(\'hdemo'+curH+'\').setOpacity(0)',510); }; if(i) { if(cob['heads']) cob['heads'].stop(); if(init) cob['heads'] = new PeriodicalExecuter(function(pe) { nextdHead();} , 3); curH = i; } else { if(curH == hCount) curH = 1; else curH++; }; if($('hdemo'+curH).getStyle('display') == 'none') $('hdemo'+curH).style.display = 'block'; if(effects['fade'+curH]) effects['fade'+curH].cancel(); effects['fade'+curH] = new Effect.Fade('hdemo'+curH, {duration:0.6, from: 0, to: 1}); }; function nextHead() { if(!hInt) return; if($('fc') && $('fc').style.display != 'none') $('fc').style.display = 'none'; new Effect.Fade('headline'+curH, {duration:0.5, from: 1, to: 0}); setTimeout('$(\'headline'+curH+'\').style.left = \'-2000px\'',550); setTimeout('$(\'headline'+curH+'\').setOpacity(1)',550); setTimeout('$(\'headline'+curH+'\').style.display = \'\'',550); if(curH == hCount) { curH = 1; if($('fc')) $('fc').style.display = ''; } else curH++; $('headline'+curH).style.left = hX+'px'; $('headline'+curH).setOpacity(0); new Effect.Fade('headline'+curH, {duration:0.6, from: 0, to: 1}); }; function setHead(val) { if(val == curH) return; cob['heads'].stop(); hInt = 0; if($('fc') && $('fc').style.display != 'none') setTimeout('$(\'fc\').style.display = \'none\'',1050); var hY = $('headline'+curH).offsetTop; $('headline'+curH).style.top = hY+'px'; $('headline'+val).style.top = hY+'px'; $('headline'+curH).style.left = hX+'px'; new Effect.Move( 'headline'+curH, { duration:1, x: 10000, y: hY, mode: 'absolute' }); new Effect.Move( 'headline'+val, { duration:1, x: hX, y: hY, mode: 'absolute' }); setTimeout('$(\'headline'+curH+'\').style.left = \'-2000px\'',1050); if(val == 1 && $('fc')) setTimeout('$(\'fc\').style.display = \'\'',1050); curH = val; }; function initSlider() { if(!$('slideholder')) return; var obj = $('slideholder').immediateDescendants(); if(obj.length < 2) return; if($('slidedes')) var desob = $('slidedes').immediateDescendants(); var id = 0; cob['slider'] = new PeriodicalExecuter(function(pe) { slide(); } , sltime); var shVals = new Array(); for(i=1;i<=obj.length;i++) shVals.push(i); shSlider = new Control.Slider('sliderp','sliderholder',{ values:shVals, range:$R(obj.length,1), onSlide:function(v) { cob['slider'].stop(); slide(v); }, onChange:function(v){ slide(v); } }); for(i in obj) if(obj[i].nodeName == 'IMG') { obj[i].style.position = 'absolute'; obj[i].style.left = '300px'; obj[i].style.top = '200px'; obj[i].style.width = '100px'; obj[i].style.zIndex = '0'; obj[i].style.cursor = 'pointer'; id = parseInt(i)+1; obj[i].id = 'slide'+id; obj[i].onclick = function() { cob['slider'].stop(); shSlider.setValue(parseInt(this.id.toString().substring(5))); }; if(desob) { desob[i].style.display = 'none'; desob[i].id = 'sldes'+id; } }; sli = obj.length - 2; shSlider.setValue(obj.length-1); }; function dSliders() { if(!$('sliderholder1')) return; slider1 = new Control.Slider('sliderp1','sliderholder1',{ range:$R(1,100), onSlide:function(v) { $('slt1').innerHTML = slto; $('sltv1').innerHTML = parseInt(v).toString(); }, onChange:function(v){ $('slt1').innerHTML = slch; $('sltv1').innerHTML = parseInt(v).toString(); } }); slider2 = new Control.Slider(new Array('sliderp2','sliderp3','sliderp4'),'sliderholder2',{ range:$R(1,100), onSlide:function(v) { var cp = slider2.activeHandleIdx; $('sltv'+(cp+2)).innerHTML = parseInt(v[cp]); if($('sliderp'+(cp+2)).style.zIndex != '2') { $('sliderp'+(cp+2)).style.zIndex = '2'; for(var i=0;i<v.length;i++) if(i != cp) $('sliderp'+(i+2)).style.zIndex = i.toString(); } }, onChange:function(v){ var cp = slider2.activeHandleIdx; $('sltv'+(cp+2)).innerHTML = parseInt(v[cp]); } }); slider2.setValue(5); slider2.setValue(40, 1); slider2.setValue(85, 2); slider3 = new Control.Slider('sliderp5','sliderholder3',{ axis:'vertical', range:$R(1,100), onSlide:function(v) { $('slt3').innerHTML = slto; $('sltv5').innerHTML = parseInt(v).toString(); }, onChange:function(v){ $('slt3').innerHTML = slch; $('sltv5').innerHTML = parseInt(v).toString(); } }); }; function getPercent(el, tot) { if(typeof(el) == 'string') el = $(el); if(!el) return 0; return parseInt(parseInt(el.getStyle('width'))/parseInt(tot)*100); }; function slide(i) { if(i == sli) return; var obj = $('slideholder').immediateDescendants(); if(!i) { shSlider.setValue(sli == 1 ? obj.length : sli-1); return; }; var cwid = parseInt($('slideimgs').getStyle('width')); var defleft = sli > i ? -150 : cwid; sli = i; var i1 = i == obj.length ? 0 : i+1; var i2 = i == 1 ? 0 : i-1; var i3 = i == 2 ? 0 : i2-1; for(var c=1;c<=obj.length;c++) switch(c) { case i: if($('sldes'+c)) $('sldes'+c).show(); transit('slide'+c, 100, parseInt(cwid/4.39), 0); $('slide'+c).style.zIndex = '3'; break; case i1: if($('sldes'+c)) $('sldes'+c).hide(); transit('slide'+c, 86, 0, 38); $('slide'+c).style.zIndex = '2'; break; case i2: if($('sldes'+c)) $('sldes'+c).hide(); transit('slide'+c, 86, parseInt(cwid/1.86), 38); $('slide'+c).style.zIndex = '2'; break; case i3: if($('sldes'+c)) $('sldes'+c).hide(); transit('slide'+c, 66, parseInt(cwid/1.29), 90); $('slide'+c).style.zIndex = '1'; break; default: if($('sldes'+c)) $('sldes'+c).hide(); if(getPercent('slide'+c, 219) != 15) { $('slide'+c).style.zIndex = '0'; transit('slide'+c, 15, defleft, 200); }; break; } }; function transit(el, sT, mL, mT) { if(effects['scale'+el]) effects['scale'+el].cancel(); if(effects['move'+el]) effects['move'+el].cancel(); effects['scale'+el] = new Effect.Scale( el, 100,{ duration:1, scaleFrom: getPercent(el, 219),scaleTo: sT, scaleMode : {originalHeight : 370, originalWidth : 219} }); effects['move'+el] = new Effect.Move( el, { duration:1, x: mL, y: mT, mode: 'absolute' }); }; function prprev() { curp = curp-1; if(curp < 1) curp = primgs.length; var sur = primgs[curp-1]; var altu = prdess[curp-1]; changeImg(curp,sur,altu); }; function prnext() { curp = curp+1; if(curp > primgs.length) curp = 1; var sur = primgs[curp-1]; var altu = prdess[curp-1]; changeImg(curp,sur,altu); }; function changeImg(ind, sur, altu) { var ons = d.getElementsByClassName('apageon'); for(i=0;i<ons.length;i++) ons[i].className = 'apage'; curp = ind; $('i'+ind).className = 'apageon'; $('prm').style.background = 'url('+im+'loading.gif) center no-repeat'; var imgPreloader = new Image(); imgPreloader.onload=function(){ $('prm').style.background = 'url('+sur+') center no-repeat'; }; imgPreloader.src = sur; $('prd').innerHTML = altu; }; function bane(ce, ele) { if(effects['banners']) effects['banners'].cancel(); if(cob['ban']) cob['ban'].stop(); if(isie6) $('ban').parentNode.onscroll = function() { $('ban').nextSibling.style.top = (-this.scrollTop)+'px';}; $('vid').hide(); $('ban').show(); $('ban').update(ele.innerHTML); $('ban').style.backgroundColor = '#336699'; $('ban').style.left = ''; $('ban').style.top = ''; $('ban').style.textAlign = 'right'; $('ban').style.color = 'white'; $('ban').style.fontSize = '12px'; $('ban').style.padding = '3px'; $('ban').nextSibling.style.height = '425px'; $('ban').nextSibling.style.left = ''; $('ban').onmouseover = function() {}; $('ban').onmouseout = function() {}; var pad = 3; switch(ce) { case 'vid': var vid = true; case 'lde': $('ban').onmouseover = function() { if(cob['ban']) cob['ban'].stop(); cob['ban'] = new PeriodicalExecuter(function(pe) { pad += 2; if(pad > 85) pad = 85; $('ban').style.paddingTop = pad+'px'; if(pad == 85) { pe.stop(); if(vid) { $('vid').show(); $('vid').onmouseover = function() {$('ban').onmouseover()}; $('vid').style.left = ($('ban').positionedOffset()['left']+27)+'px'; $('vid').style.top = ($('ban').positionedOffset()['top']+10)+'px'; } } } , 0.01); }; $('ban').onmouseout = function() { if(cob['ban']) cob['ban'].stop(); cob['ban'] = new PeriodicalExecuter(function(pe) { pad += -2; if(pad < 85 && vid) $('vid').hide(); $('ban').style.paddingTop = pad+'px'; if(pad <= 3) pe.stop();} , 0.01); }; $('ban').update('<div style="float:left;">'+mousem+'</div>'+$('ban').innerHTML); case 'lds': $('ban').style.left = ($('ban').positionedOffset()['left']+58)+'px'; $('ban').style.width = '256px'; $('ban').style.height = '27px'; break; case 'ske': pad = 39; $('ban').onmouseover = function() { if(cob['ban']) cob['ban'].stop(); cob['ban'] = new PeriodicalExecuter(function(pe) { pad += 2; if(pad > 113) pad = 113; $('ban').style.width = pad+'px'; if(pad == 113) pe.stop();} , 0.01); }; $('ban').onmouseout = function() { if(cob['ban']) cob['ban'].stop(); cob['ban'] = new PeriodicalExecuter(function(pe) { pad += -2; $('ban').style.width = pad+'px'; if(pad <= 39) pe.stop();} , 0.01); }; $('ban').innerHTML += '<div style="padding-top:90px">'+mousem+'</div>'; case 'sks': $('ban').style.top = ($('ban').positionedOffset()['top']+85)+'px'; $('ban').style.width = '41px'; $('ban').style.height = '167px'; $('ban').style.fontSize = '9px'; break; case 'res': $('ban').style.top = ($('ban').positionedOffset()['top']+65)+'px'; $('ban').style.left = ($('ban').positionedOffset()['left']+210)+'px'; $('ban').style.width = '105px'; $('ban').style.height = '81px'; break; case 'has': $('ban').style.top = ($('ban').positionedOffset()['top']+197)+'px'; $('ban').style.left = ($('ban').positionedOffset()['left']+210)+'px'; $('ban').style.width = '105px'; $('ban').style.height = '181px'; break; case 'ove': $('ban').style.top = ($('ban').positionedOffset()['top']+100)+'px'; $('ban').style.left = ($('ban').positionedOffset()['left']+70)+'px'; $('ban').style.width = '173px'; $('ban').style.height = '130px'; break; case 'st2': $('ban').style.top = ($('ban').positionedOffset()['top']+397)+'px'; $('ban').style.width = '297px'; $('ban').style.height = '24px'; $('ban').nextSibling.style.height = '600px'; break; case 'st1': $('ban').style.left = ($('ban').positionedOffset()['left']+230)+'px'; $('ban').style.width = '72px'; $('ban').style.height = '48px'; $('ban').nextSibling.style.height = '600px'; $('ban').nextSibling.style.left = '-82px'; break; case 'tra': $('ban').style.left = ($('ban').positionedOffset()['left']+57)+'px'; $('ban').style.top = ($('ban').positionedOffset()['top']+72)+'px'; $('ban').style.background = 'transparent'; $('ban').style.textAlign = 'left'; $('ban').innerHTML = '<a href="#" style="font-size:10px" onclick="bane(\'transi\', this); return false;">'+clickh+'</a>'; break; case 'transi': $('ban').hide(); $('ban').style.width = '314px'; $('ban').style.height = '419px'; $('ban').update('&nbsp;<br><br>'+yourad); effects['banners'] = new Effect.Appear('ban'); pad = 10; cob['ban'] = new PeriodicalExecuter(function(pe) { pad += -1; $('ban').update(closingin+': '+pad+' '+secs+'<br><br>'+yourad); if(pad == 0) { effects['banners'] = new Effect.Fade('ban'); pe.stop(); } } , 1); break; }; return; }; function swfuploadini() { if(!$('divFileProgressContainer')) return; swfu = new SWFUpload({ upload_url: root+"upload.php", post_params: {"PHPSESSID": PHPSESSID}, file_size_limit : "2 MB", file_types : "*.jpg", file_types_description : "JPG Images", file_upload_limit : "0", file_queue_error_handler : fileQueueError, file_dialog_complete_handler : fileDialogComplete, upload_progress_handler : uploadProgress, upload_error_handler : uploadError, upload_success_handler : uploadSuccess, upload_complete_handler : uploadComplete, button_image_url : im+"spyglass.png", button_placeholder_id : "spanButtonPlaceholder", button_width: 200, button_height: 18, button_text : '<span class="button">'+selectimages+' <span class="buttonSmall">(2 MB Max)</span></span>', button_text_style : '.button {font-family: Helvetica, Arial, sans-serif;} .buttonSmall { font-size: 10px; }', button_text_top_padding: 0, button_text_left_padding: 18, button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT, button_cursor: SWFUpload.CURSOR.HAND, flash_url : root+"templates/swfupload.swf", custom_settings : { upload_target : "divFileProgressContainer" }, debug: false }); }; function dcart() { if(!$('cartitems')) return; new Draggable('sitem1', { revert:true }); new Draggable('sitem2', { revert:true }); new Draggable('sitem3', { revert:true }); Droppables.add("cartitems", { accept:'sitem', onDrop:function(element) { addCart(parseInt(element.id.toString().substring(5))); } }); }; function ddrag() { if(!$('dele')) return; drags['dele'] = new Draggable("dele", { revert:"failure", onDropped: function(element) { element.hide(); }, reverteffect: function(element, top_offset, left_offset) { var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, transition: Effect.Transitions.spring, queue: {scope:'_draggable', position:'end'} }); } }); Droppables.add("delet", { accept:'drag', onDrop:function(draggable, droparea) { droparea.update(draggable.innerHTML); new Effect.Highlight(droparea); } }); Droppables.activate = function(drop) { if(!drop.element.id) return; drop.element.style.background = 'none'; drop.element.style.borderColor = 'orange'; this.last_active = drop; }; Droppables.deactivate = function(drop) { if(!drop.element.id) return; drop.element.style.borderColor = '#bdbcbd'; this.last_active = null; }; drags['snapd'] = new Draggable('snapd',{ snap: function(x,y,draggable) { function constrain(n, lower, upper) { if (n > upper) return upper; else if (n < lower) return lower; else return n; }; element_dimensions = Element.getDimensions(draggable.element); parent_dimensions = Element.getDimensions(draggable.element.parentNode); return[ constrain(x, 0, parent_dimensions.width - element_dimensions.width), constrain(y, 0, parent_dimensions.height - element_dimensions.height)]; }, revert:false }); Sortable.create('smenu', {tree:true,scroll:window}); Sortable.create('sorti',{ghosting:true,constraint:false }); }; function effereset() { $('ele').setStyle(effects['effe'].originalStyle); effects['effe'] = null; }; function effe(ce) { if(effects['effe']) return; switch(ce) { case 'highlight': $('ele').show(); effects['effe'] = new Effect.Highlight('ele'); break; case 'grow': effects['effe'] = new Effect.Grow('ele'); break; case 'shrink': effects['effe'] = new Effect.Shrink('ele'); break; case 'shake': $('ele').show(); effects['effe'] = new Effect.Shake('ele'); break; case 'pulsate': $('ele').show(); effects['effe'] = new Effect.Pulsate('ele'); break; case 'slideup': effects['effe'] = new Effect.SlideUp('ele'); break; case 'slidedown': effects['effe'] = new Effect.SlideDown('ele'); break; case 'blindup': effects['effe'] = new Effect.BlindUp('ele'); break; case 'blinddown': effects['effe'] = new Effect.BlindDown('ele'); break; case 'fade': effects['effe'] = new Effect.Fade('ele'); break; case 'appear': $('ele').hide(); effects['effe'] = new Effect.Appear('ele'); break; case 'puff': $('ele').show(); effects['effe'] = new Effect.Puff('ele'); break; case 'dropout': $('ele').show(); effects['effe'] = new Effect.DropOut('ele'); break; case 'fold': $('ele').show(); effects['effe'] = new Effect.Fold('ele'); break; case 'switchoff': effects['effe'] = new Effect.SwitchOff('ele'); break; case 'switchon': effects['effe'] = new Effect.Scale('ele', 100,{ duration: 0.4, scaleFromCenter: true, scaleFrom: 1, scaleX: false, scaleContent: false, restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.show().makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { new Effect.Appear(effect.element, {duration: 0.3, from:0 , transition: Effect.Transitions.flicker}) } }); break; }; setTimeout('effereset()',1300); }; function addCart(id) { phpSend('addcart/'+id, 'cartitems'); }; function remCart(id) { phpSend('remcart/'+id, 'cartitems'); }; function initMenu() { if(!$('mainmenu')) return; var mels = $('mainmenu').immediateDescendants(); for(var i=0;i<mels.length;i++) if(mels[i].id == 'mon') { mels[i].down(0).style.backgroundImage = 'url('+im+'menulo.gif)'; mels[i].down(1).style.backgroundImage = 'url('+im+'menuo.gif)'; mels[i].down(2).style.backgroundImage = 'url('+im+'menuro.gif)'; } else { mels[i].onmouseover = function() { this.down(0).style.backgroundImage = 'url('+im+'menulo.gif)'; this.down(1).style.backgroundImage = 'url('+im+'menuo.gif)'; this.down(2).style.backgroundImage = 'url('+im+'menuro.gif)'; }; mels[i].onmouseout = function() { this.down(0).style.backgroundImage = 'url('+im+'menul.gif)'; this.down(1).style.backgroundImage = 'url('+im+'menu.gif)'; this.down(2).style.backgroundImage = 'url('+im+'menur.gif)'; } } }; function init() { initMenu(); setHeights(); initHeads(); setInputs(); dSliders(); ddrag(); dcart(); swfuploadini(); correctPNG(); initSlider(); initFlow(); if(location.href.match('#')) { var anch = location.href.substring(location.href.indexOf('#')+1); if($(anch) && $(anch).onclick) $(anch).onclick(); } }; function initFlow() { if(!$('workflow')) return; witemwid = $('workflow').childElements()[0].getWidth(); $('workflow').setStyle('width:'+(witemwid*$('workflow').childElements().length)+'px'); workwid = $('wholder').getWidth(); workwid = -($('workflow').childElements().length-Math.round(workwid/witemwid))*witemwid; cob['wflow'] = new PeriodicalExecuter(function(pe) { wmove();} , wtime); }; function wmove(parte) { if(parte) { if(parte == 1) { if(slmove >= 0) slmove = workwid; else slmove += witemwid; } else { if(slmove <= workwid) slmove = 0; else slmove += -witemwid; }; cob['wflow'].stop(); } else { if(slmove <= workwid) slmove = 0; else slmove += -witemwid; }; if(effects['movew']) effects['movew'].cancel(); effects['movew'] = new Effect.Move( 'workflow', { x: slmove, y: 0, mode: 'absolute' }); }; function switchy(care, ne, func) { if(!ne || !care) return; eval(func); var ht = care.innerHTML; var el = care.up(); el.innerHTML = '<b>'+ht+'</b>'; if(ne == 1) { ht = el.next().down().innerHTML; el.next().innerHTML = '<a href="#" onclick="switchy(this, 2'+(func ? ', \''+func.addsl()+'\'' : '')+');return false;">'+ht+'</a>'; } else { ht = el.previous().down().innerHTML; el.previous().innerHTML = '<a href="#" onclick="switchy(this, 1'+(func ? ', \''+func.addsl()+'\'' : '')+');return false;">'+ht+'</a>'; } }; String.prototype.addsl = function() { var val = this.toString(); val = val.replace(/\'/g, '\\\''); return val; }; String.prototype.toPhp = function() { var val = this.toString(); val = val.replace(/\n/g, '<br>'); val = val.replace(/&/g, '[]amp;'); val = val.replace(/\//g, '[]slash;'); val = val.replace(/%/g, '[]suta;'); val = val.replace(/#/g, '[]diez;'); val = val.replace(/\?/g, '[]ask;'); val = val.replace(/“/g, '"'); val = val.replace(/”/g, '"'); return val; }; String.prototype.brnl = function() { var val = this.toString(); val = val.replace(/<br>/g, '\n'); return val; }; String.prototype.nlbr = function() { var val = this.toString(); val = val.replace(/\n/g, '<br>'); return val; }; String.prototype.toFloat = function() { var val = this.toString(); val = val.replace(/,/g, '.'); var ind = val.match(/0|1|2|3|4|5|6|7|8|9/); if(ind && ind.index) val = val.substring(ind.index); val = parseFloat(val); if(isNaN(val)) val = 0; return val; }; function email_valid(str) { return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str)) ? true : false; }; window.onscroll = function() { if(!isie6) return; var dim = d.viewport.getScrollOffsets(); if($('debug')) $('debug').style.top = (dim.top+5)+'px'; if($('popload')) $('popload').style.top = dim.top+'px'; if($('formerr')) $('formerr').style.top = (dim.top+5)+'px'; }; function fSize(inc) { var fo = d.getElementsByClassName('abody'); if(fo.length < 1) return; var fos = 0; for(var i=0;i<fo.length;i++) { fos = parseInt(fo[i].getStyle('fontSize')); if(!deffontSize[i]) deffontSize[i] = fos; if(inc == 2) if(fos < deffontSize[i]+8) fos++; if(inc == 1) if(fos > deffontSize[i]-2) fos--; fo[i].style.fontSize = fos+'px'; var desce = fo[i].descendants(); for(var j=0;j<desce.length;j++) if(desce[j].nodeName != 'BR') { fos = parseInt(desce[j].getStyle('fontSize')); if(!deffontSize[i+'b'+j]) deffontSize[i+'b'+j] = fos; if(inc == 2) if(fos < deffontSize[i+'b'+j]+8) fos++; if(inc == 1) if(fos > deffontSize[i+'b'+j]-2) fos--; desce[j].style.fontSize = fos+'px'; } } }; function mtip(tex) { if(!$('mshtip')) { var deb = d.createElement('div'); deb.id = 'mshtip'; deb.style.color = '#333'; deb.style.backgroundColor = '#fcffde'; deb.style.fontSize = '11px'; deb.style.border = '1px solid #cccccc'; deb.style.position = 'absolute'; deb.style.padding = '7px 12px 7px 12px'; deb.style.zIndex = '100'; deb.onclick = function() { won = true; }; $(d.body).appendChild(deb); }; if(tex) { $('mshtip').style.left = (tempX - $('mshtip').getWidth() - 15)+'px'; $('mshtip').innerHTML = tex; var vdim = (d.body).firstDescendant().getHeight(); var mtop = Math.min(vdim-$('mshtip').getHeight(), tempY); mtop += -2; if(mtop < 0) mtop = 0; $('mshtip').style.top = mtop+'px'; var vdim = (d.body).firstDescendant().getWidth(); var mleft = Math.min(vdim-$('mshtip').getWidth(), tempX); mleft = mleft < tempX ? tempX-$('mshtip').getWidth() - 15 : mleft+15; if(mleft < 0) mleft = 0; $('mshtip').style.left = mleft+'px'; $('mshtip').show(); won = true; $(d.body).onclick = function() { if(!won) { mtip(); $(d.body).onclick = function() {}; } else won = false; }; } else $('mshtip').hide(); }; function hint(care, tex) { if(!$('mshint')) { var deb = d.createElement('div'); deb.id = 'mshint'; deb.setStyle('color:#fff;font:12px Arial;height:35px;position:absolute;z-index:100'); deb.innerHTML = '<div style="height:25px">'+ '<div style="float:left;width:3px;height:25px;background:url('+im+'default/hintl.png) no-repeat;"></div>'+ '<div style="background:url('+im+'default/hintr.png) top repeat-x;float:left;height:21px;padding:4px 15px 0 14px"></div>'+ '<div style="float:left;width:3px;height:25px;background:url('+im+'default/hinto.png) no-repeat;"></div>'+ '</div>'+ '<div style="background:url('+im+'default/hinti.png) 19px 0 no-repeat;height:11px;position:relative;top:-1px;"></div>'; deb.setOpacity(0.8); $(d.body).appendChild(deb); }; if(care && tex) { $('mshint').down().down().next().innerHTML = tex; var dims = care.positionedOffset(); $('mshint').style.left = parseInt(dims.left+care.getWidth()/2-30)+'px'; $('mshint').style.top = (dims.top-35)+'px'; $('mshint').show(); } else $('mshint').hide(); }; d.onmousemove = getMouseXY; function getMouseXY(e) { if(isie) { tempX = event.clientX + d.documentElement.scrollLeft; tempY = event.clientY + d.documentElement.scrollTop; } else { tempX = e.pageX; tempY = e.pageY; }; if (tempX < 0) tempX = 0; if (tempY < 0) tempY = 0; }; function submitform(n, submitf) { if(!n) { debug('select a form to submit'); return false; }; var theform = null; if(parseInt(n)) n = parseInt(n); switch(typeof(n)) { case 'object': theform = n; break; case 'string': for(var i=0;i<d.forms.length;i++) if(d.forms[i].name == n) { theform = d.forms[i]; break; }; break; case 'number': theform = d.forms[n]; break; default: return false; }; if(!theform.tagName || theform.tagName != 'FORM') { debug('invalid form'); return false; }; if($('formerr')) $('formerr').hide(); var err = false; var rads = new Array(); var oldv = ''; var ins = theform.elements; for(var i=0;i<ins.length;i++) if((ins[i].className.substring(0,4) == 'req ' || ins[i].className == 'req') && ins[i].tagName == 'INPUT' && ins[i].type == 'radio') { rads.push(ins[i]); ins[i].next().style.borderBottom = '0'; }; rads = rads.sortBy(function(el) { return el.name}, this); var radsok = new Array(); var radsn = new Array(); for(i=0;i<rads.length;i++) { radsn.push(rads[i].name); if(rads[i].checked) radsok.push(rads[i].name); }; radsn = radsn.uniq(); if(radsn.length != radsok.length) { err = true; for(var i=0;i<rads.length;i++) if(!radsok.include(rads[i].name)) rads[i].next().style.borderBottom = '1px solid red'; }; var conti = false; for(var i=0;i<ins.length;i++) if((ins[i].className.substring(0,4) == 'req ' || ins[i].className == 'req') && ins[i].name && ins[i].type != 'radio') { conti = false; for(var j=0;j<rads.length;j++) if(ins[i].name.substring(0,rads[j].value.length) == rads[j].value && !rads[j].checked) { conti = true; break; }; if(conti) continue; oldv = ins[i].oldval; if(ins[i].tagName == 'TEXTAREA' || (ins[i].type && (ins[i].type == 'text' || ins[i].type == 'password'))) { if(ins[i].style.borderColor == 'red red red red') { ins[i].style.borderColor = ins[i].oldborderc; ins[i].style.backgroundColor = ins[i].oldback; ins[i].style.backgroundImage = ins[i].oldbacki; }; if(!ins[i].value || ins[i].value == oldv || (ins[i].name.match('email') && !email_valid(ins[i].value))) { err = true; ins[i].oldborderc = $(ins[i]).getStyle('border-color'); ins[i].style.borderColor = 'red'; ins[i].oldback = $(ins[i]).getStyle('background-color'); ins[i].oldbacki = $(ins[i]).getStyle('background-image'); if(ins[i].getStyle('background-repeat') != 'no-repeat') ins[i].style.backgroundImage = 'none'; ins[i].style.backgroundColor = '#ffdddd'; } } else if(ins[i].type && ins[i].type == 'checkbox') { if(!ins[i].checked) { err = true; $(ins[i]).next().oldcolor = $(ins[i]).next().getStyle('color'); $(ins[i]).next().style.color = 'red'; } else if($(ins[i]).next().oldcolor) $(ins[i]).next().style.color = $(ins[i]).next().oldcolor; } else if(ins[i].tagName == 'SELECT') { if(ins[i].style.borderColor == 'red red red red') { ins[i].style.borderColor = ins[i].oldborderc; ins[i].style.backgroundColor = ins[i].oldback; ins[i].style.backgroundImage = ins[i].oldbacki; }; if(!ins[i].value || ins[i].value == oldv || ins[i].value == '0') { err = true; ins[i].oldborderc = $(ins[i]).getStyle('border-color'); ins[i].style.borderColor = 'red'; ins[i].oldback = $(ins[i]).getStyle('background-color'); ins[i].oldbacki = $(ins[i]).getStyle('background-image'); if(ins[i].getStyle('background-repeat') != 'no-repeat') ins[i].style.backgroundImage = 'none'; ins[i].style.backgroundColor = '#ffdddd'; } } }; if(err) { var dim = d.viewport.getDimensions(); if(!$('formerr')) { var deb = d.createElement('div'); deb.id = 'formerr'; deb.style.position = isie6 ? 'absolute' : 'fixed'; deb.style.top = (isie6 ? d.viewport.getScrollOffsets().top+5 : 5)+'px'; deb.style.backgroundColor = '#ffdddd'; deb.style.font = '11px Arial'; deb.style.padding = '7px'; deb.style.border = '1px solid red'; deb.style.zIndex = '200'; deb.style.color = 'red'; deb.style.fontSize = '13px'; deb.style.fontWeight = 'bold'; deb.innerHTML = formerrort; $(d.body).appendChild(deb); $('formerr').setOpacity(0.9); }; $('formerr').show(); $('formerr').style.left = parseInt(dim['width']/2 - $('formerr').getWidth()/2)+'px'; return false; } else { for(var i=0;i<ins.length;i++) if(ins[i].oldval && ins[i].oldval == ins[i].value) ins[i].value = ''; if(submitf) theform.submit(); else return true; } }; function getFunc(func) { if(!func) return ''; func = func.toString(); func = func.substring(func.indexOf(')')+3); return func.substring(0, func.length-2); }; function setInputs() { var i = 0; var ins = new Array(); var temp; temp = d.getElementsByTagName('input'); for(i=0;i<temp.length;i++) if((temp[i].type == 'text' || temp[i].type == 'password') && temp[i].oldborders == null) { if(isie6 && $(temp[i]).getWidth() == 146) temp[i].style.width = '220px'; ins.push(temp[i]); }; temp = d.getElementsByTagName('textarea'); for(i=0;i<temp.length;i++) if(temp[i].oldborders == null) ins.push(temp[i]); temp = d.getElementsByTagName('select'); for(i=0;i<temp.length;i++) if(temp[i].oldborders == null) ins.push(temp[i]); for(i=0;i<ins.length;i++) { ins[i].oldborders = $(ins[i]).getStyle('border-style'); ins[i].oldborderc = $(ins[i]).getStyle('border-color'); ins[i].oldback = $(ins[i]).getStyle('background-color'); ins[i].oldbacki = $(ins[i]).getStyle('background-image'); ins[i].oldcolor = $(ins[i]).getStyle('color'); if(ins[i].onfocus) ins[i].ofocus = getFunc(ins[i].onfocus); if((ins[i].className.substring(0,4) == 'req ' || ins[i].className.substring(0,4) == 'def ') && ins[i].type != 'password') { ins[i].oldval = ins[i].className.substring(4); if(!ins[i].value) ins[i].value = ins[i].oldval; ins[i].onfocus = function() { if(this.ofocus) { if(this.ofocus.match('return')) return; else eval(this.ofocus); }; if(this.value == this.oldval) this.value = ''; this.focused = true; } } else ins[i].onfocus = function() { if(this.ofocus) { if(this.ofocus.match('return')) return; else eval(this.ofocus); }; this.focused = true; }; if(ins[i].onmouseover) ins[i].omouseover = getFunc(ins[i].onmouseover); ins[i].onmouseover = function() { if(this.omouseover) { if(this.omouseover.match('return')) return; else eval(this.omouseover); }; this.style.backgroundColor = '#ffffdd'; this.style.borderStyle = 'solid'; this.style.borderColor = '#ffee66'; this.style.color = '#000'; if(this.getStyle('background-repeat') != 'no-repeat') this.style.backgroundImage = 'none'; }; if(ins[i].onblur) ins[i].oblur = getFunc(ins[i].onblur); ins[i].onblur = function() { if(this.oblur) { if(this.oblur.match('return')) return; else eval(this.oblur); }; if(this.oldval && !this.value) this.value = this.oldval; this.style.backgroundColor = this.oldback; this.style.backgroundImage = this.oldbacki; this.style.borderStyle = this.oldborders; this.style.borderColor = this.oldborderc; this.style.color = this.oldcolor; this.focused = false; }; if(ins[i].onmouseout) ins[i].omouseout = getFunc(ins[i].onmouseout); ins[i].onmouseout = function() { if(this.omouseout) { if(this.omouseout.match('return')) return; else eval(this.omouseout); }; if(!this.focused) { this.style.backgroundImage = this.oldbacki; this.style.backgroundColor = this.oldback; this.style.borderStyle = this.oldborders; this.style.borderColor = this.oldborderc; this.style.color = this.oldcolor; } } }; $$(".select").each(function (element) { if(element.conv) return; element.writeAttribute('conv', 'true'); element.down().observe('mouseout', function (event) { var relatedTarget = $(event.relatedTarget || event.fromElement); var target = Event.element(event); if ((target == element || Element.descendantOf(target, element)) && !((relatedTarget == element) || Element.descendantOf(relatedTarget, element))) element.down().hide(); }); element.down().next().observe('mouseover', function (event) { element.down().style.display = 'block'; }); element.down().down().next().descendants().each(function (el) { el.writeAttribute('oncli', getFunc(el.onclick)); el.writeAttribute('href', 'javascript:'); el.observe('click', function(event) { eval(el.oncli); element.down().down().next().descendants().each(function (au) { au.className = el.className; }); el.className += ' on'; var ind = el.innerHTML.indexOf('.'); element.down().next().update(el.innerHTML.substring(ind ? ind+1 : 0)); element.down().hide(); return false; }); }); }); }; function setHeights() { if(!$('body')) { alert('Nu ai \'body\'!'); return; }; $('body').setStyle('float:left;width:100%;'); $('footer').setStyle('float:left;width:100%;margin-top:20px'); window.onresize = function() {}; var vdim = d.viewport.getDimensions(); var wind = $(d.body).firstDescendant(); vdim['width'] = Math.max(vdim['width'], $('body').getWidth()+20); wind.style.position = 'absolute'; wind.style.overflow = 'hidden'; wind.style.width = vdim['width']+'px'; vdim['height'] += -$('footer').getHeight() - 20; vdim['height'] += -$('header').getHeight(); if(vdim['height'] > $('body').getHeight()) $('body').style.height = vdim['height']+'px'; if($('headline1')) { hX = wind.firstDescendant().positionedOffset()['left']; $('headline'+curH).style.position = 'absolute'; $('headline'+curH).style.left = hX+'px'; }; if($('popload')) { var dim = d.viewport.getDimensions(); $('popload').style.width = dim['width']+'px'; $('popload').style.height = dim['height']+'px'; var wid = $('popdiv').getWidth(); var hei = $('popdiv').getHeight(); $('popdiv').style.marginTop = parseInt(dim['height']/2 - hei/2)+'px'; $('popdiv').style.marginLeft = parseInt(dim['width']/2 - wid/2)+'px'; $('popclose').style.top = parseInt(dim['height']/2 - hei/2 + 4)+'px'; $('popclose').style.left = parseInt(dim['width']/2 + wid/2 - $('popclose').getWidth() - 4)+'px'; }; setTimeout('window.onresize = setHeights',100); }; function debug(el, func, infunc) { if(!$('debug')) { var deb = d.createElement('div'); deb.id = 'debug'; deb.style.left = '5px'; deb.style.top = (isie6 ? d.viewport.getScrollOffsets().top+5 : 5)+'px'; deb.style.overflow = 'auto'; deb.style.backgroundColor = '#444444'; deb.style.color = '#ffffff'; deb.style.font = '11px Arial'; deb.style.padding = '7px'; deb.style.border = '2px solid #ffffff'; deb.style.position = isie6 ? 'absolute' : 'fixed'; if(isie6) { deb.style.width = '600px'; deb.style.height = '200px'; } else { deb.style.maxHeight = '200px'; deb.style.minWidth = '250px'; deb.style.maxWidth = '600px'; }; deb.style.zIndex = '10000'; $(d.body).appendChild(deb); $('debug').setOpacity(0.9); }; var type = typeof(el); var sel = ''; switch(type) { case 'object': for (var i in el) if(i != 'channel' && el[i] && (typeof(el[i]) != 'function' || func)) { sel += i; if(infunc || typeof(el[i]) != 'function') sel += ' : '+el[i].toString().replace(/\n/g, '<br>'); sel += '<br>'; }; break; case 'undefined': sel = 'undefined'; break; case 'boolean': case 'number': case 'string': case 'function': default: sel = el.toString().replace(/\n/g, '<br>')+'<br>'; break; }; if(!sel) sel = '&nbsp;'; $('debug').innerHTML += ($('debug').innerHTML.length ? '<br>' : '')+sel; $('debug').scrollTop = $('debug').scrollHeight - $('debug').clientHeight; }; function Preload() { if (!d.images) return; d.prArr=new Array(); var a=Preload.arguments; for(var i=0; i<a.length; i++) { d.prArr[i]=new Image; if(a[i].substring(0,4) != 'http') a[i] = im+'dyn/'+a[i]; d.prArr[i].src = a[i]; } }; function latin1(str) { if(!str) return; str = str.toString(); var entities = {}, histogram = {}, decimal = 0, symbol = ''; entities['161'] = '[]iexcl;'; entities['162'] = '[]cent;'; entities['163'] = '[]pound;'; entities['164'] = '[]curren;'; entities['165'] = '[]yen;'; entities['166'] = '[]brvbar;'; entities['167'] = '[]sect;'; entities['168'] = '[]uml;'; entities['169'] = '[]copy;'; entities['170'] = '[]ordf;'; entities['171'] = '[]laquo;'; entities['172'] = '[]not;'; entities['173'] = '[]shy;'; entities['174'] = '[]reg;'; entities['175'] = '[]macr;'; entities['176'] = '[]deg;'; entities['177'] = '[]plusmn;'; entities['178'] = '[]sup2;'; entities['179'] = '[]sup3;'; entities['180'] = '[]acute;'; entities['181'] = '[]micro;'; entities['182'] = '[]para;'; entities['183'] = '[]middot;'; entities['184'] = '[]cedil;'; entities['185'] = '[]sup1;'; entities['186'] = '[]ordm;'; entities['187'] = '[]raquo;'; entities['188'] = '[]frac14;'; entities['189'] = '[]frac12;'; entities['190'] = '[]frac34;'; entities['191'] = '[]iquest;'; entities['192'] = '[]Agrave;'; entities['193'] = '[]Aacute;'; entities['194'] = '[]Acirc;'; entities['195'] = '[]Atilde;'; entities['196'] = '[]Auml;'; entities['197'] = '[]Aring;'; entities['198'] = '[]AElig;'; entities['199'] = '[]Ccedil;'; entities['200'] = '[]Egrave;'; entities['201'] = '[]Eacute;'; entities['202'] = '[]Ecirc;'; entities['203'] = '[]Euml;'; entities['204'] = '[]Igrave;'; entities['205'] = '[]Iacute;'; entities['206'] = '[]Icirc;'; entities['207'] = '[]Iuml;'; entities['208'] = '[]ETH;'; entities['209'] = '[]Ntilde;'; entities['210'] = '[]Ograve;'; entities['211'] = '[]Oacute;'; entities['212'] = '[]Ocirc;'; entities['213'] = '[]Otilde;'; entities['214'] = '[]Ouml;'; entities['215'] = '[]times;'; entities['216'] = '[]Oslash;'; entities['217'] = '[]Ugrave;'; entities['218'] = '[]Uacute;'; entities['219'] = '[]Ucirc;'; entities['220'] = '[]Uuml;'; entities['221'] = '[]Yacute;'; entities['222'] = '[]THORN;'; entities['223'] = '[]szlig;'; entities['224'] = '[]agrave;'; entities['225'] = '[]aacute;'; entities['226'] = '[]acirc;'; entities['227'] = '[]atilde;'; entities['228'] = '[]auml;'; entities['229'] = '[]aring;'; entities['230'] = '[]aelig;'; entities['231'] = '[]ccedil;'; entities['232'] = '[]egrave;'; entities['233'] = '[]eacute;'; entities['234'] = '[]ecirc;'; entities['235'] = '[]euml;'; entities['236'] = '[]igrave;'; entities['237'] = '[]iacute;'; entities['238'] = '[]icirc;'; entities['239'] = '[]iuml;'; entities['240'] = '[]eth;'; entities['241'] = '[]ntilde;'; entities['242'] = '[]ograve;'; entities['243'] = '[]oacute;'; entities['244'] = '[]ocirc;'; entities['245'] = '[]otilde;'; entities['246'] = '[]ouml;'; entities['247'] = '[]divide;'; entities['248'] = '[]oslash;'; entities['249'] = '[]ugrave;'; entities['250'] = '[]uacute;'; entities['251'] = '[]ucirc;'; entities['252'] = '[]uuml;'; entities['253'] = '[]yacute;'; entities['254'] = '[]thorn;'; entities['255'] = '[]yuml;'; for (decimal in entities) { symbol = String.fromCharCode(decimal); histogram[symbol] = entities[decimal]; }; var pat; for (var key in histogram) { pat = new RegExp(key,"g"); str = str.replace(pat, histogram[key]); }; return str; }; function phpSend(getline, id) { if(!getline) { debug('Invalid Request'); return; }; getline = latin1(getline); if(getline.substring(0,4) != 'http') getline = root+'phpsend/'+getline; new Ajax.Request(getline, { method:'get', onSuccess: function(transport) { if(id) { $(id+'ajaxload').remove(); if($(id).offsetHeight == 32) $(id).style.height = ''; }; var response = transport.responseText; if(response.substring(0,5) == 'eval:') eval(response.substring(5)); else if(id) $(id).innerHTML = response; if(response.match(/<input|<select|<textarea/g)) setInputs(); }, onLoading: function() { if(!id) return; if(!$(id).visible()) $(id).show(); var dim = $(id).getDimensions(); var offs = $(id).cumulativeOffset(); dim['width'] += -(parseInt($(id).getStyle('padding-right'))+parseInt($(id).getStyle('padding-left'))); dim['height'] += -(parseInt($(id).getStyle('padding-top'))+parseInt($(id).getStyle('padding-bottom'))); offs['left'] += parseInt($(id).getStyle('padding-left')); offs['top'] += parseInt($(id).getStyle('padding-top')); if(dim['height'] <= 0) { $(id).style.height = '32px'; dim['height'] = 32; }; if(dim['width'] <= 0) { $(id).style.width = '32px'; dim['width'] = 32; }; var deb = d.createElement('div'); deb.id = id+'ajaxload'; $(d.body).appendChild(deb); $(id+'ajaxload').style.position = 'absolute'; if(isie6) { $(id+'ajaxload').style.backgroundColor = "#000000"; $(id+'ajaxload').style.backgroundColor = "transparent"; $(id+'ajaxload').style.backgroundImage = "url("+im+"default/blank.gif)"; $(id+'ajaxload').runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+im+"default/overlay.png',sizingMethod='scale')"; } else $(id+'ajaxload').style.backgroundImage = 'url('+im+'default/overlay.png)'; $(id+'ajaxload').innerHTML = '<div align="center" style="padding-top:'+(dim['height'] > 32 ? parseInt(dim['height']/2) - 16 : 0)+'px"><img height="'+(dim['height'] < 32 ? dim['height'] : 32)+'" src="'+im+'default/loading.gif" alt="please wait..."></div>'; $(id+'ajaxload').style.zIndex = '100'; $(id+'ajaxload').style.width = dim['width']+'px'; $(id+'ajaxload').style.height = dim['height']+'px'; $(id+'ajaxload').style.left = offs['left']+'px'; $(id+'ajaxload').style.top = offs['top']+'px'; } }); }; function popImgClose() { if(!$('popload').visible()) return; won = false; $('popload').hide(); }; function popLoad() { if($('popload')) return; var dim = d.viewport.getDimensions(); var deb = d.createElement('div'); deb.id = 'popload'; deb.style.position = isie6 ? 'absolute' : 'fixed'; if(isie6) { deb.style.backgroundColor = "#000000"; deb.style.backgroundColor = "transparent"; deb.style.backgroundImage = "url("+im+"default/blank.gif)"; deb.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+im+"default/overlay_dark.png',sizingMethod='scale')"; } else deb.style.backgroundImage = 'url('+im+'default/overlay_dark.png)'; deb.innerHTML = '<div id="popdiv"></div><img src="'+im+'default/close.png" alt="Close" id="popclose">'; $(d.body).appendChild(deb); $('popload').style.zIndex = '100'; $('popload').style.left = '0px'; $('popload').style.top = (isie6 ? d.viewport.getScrollOffsets().top : 0)+'px'; $('popload').style.width = dim['width']+'px'; $('popload').style.height = dim['height']+'px'; $('popdiv').style.overflow = 'auto'; $('popdiv').onclick = function() { won = true; }; $('popclose').style.cursor = 'pointer'; $('popclose').style.position = isie6 ? 'absolute' : 'fixed'; $('popclose').onmouseover = function() { var deb = d.createElement('div'); deb.id = 'popcloset'; $(d.body).appendChild(deb); deb.setStyle('position:absolute;font:12px Arial;color:white;z-index:101;'); deb.update(closet+'<div style="position:relative;top:-16px;left:-1px;color:black">'+closet+'</div>'); deb.style.left = ($(this).positionedOffset().left - deb.getWidth() - 8)+'px'; deb.style.top = ($(this).positionedOffset().top - 2)+'px'; }; $('popclose').onmouseout = function() { $('popcloset').remove(); }; }; function popImg(srcu) { var dim = d.viewport.getDimensions(); popLoad(); if(isie || ischrome) $('popdiv').style.overflow = 'hidden'; $('popload').onclick = function() { if(!won) popImgClose(); else won = false; }; $('popclose').onclick = function() { popImgClose(); }; $('popdiv').innerHTML = '<img id="popim" src="'+im+'default/loading_dark.gif" alt="please wait...">'; $('popclose').hide(); $('popload').show(); $('popdiv').style.width = '32px'; $('popdiv').style.height = '32px'; $('popim').style.paddingTop = parseInt(32/2 - 16)+'px'; $('popim').style.paddingLeft = parseInt(32/2 - 16)+'px'; $('popdiv').style.marginTop = parseInt(dim['height']/2 - 32/2)+'px'; $('popdiv').style.marginLeft = parseInt(dim['width']/2 - 32/2)+'px'; Event.observe(window,'keypress',function(event) { if(event.keyCode == 27) popImgClose(); }); var imgu = new Image; imgu.onload = function() { $('popdiv').innerHTML = ''; $('popdiv').appendChild(this); var wid = $(this).getWidth(); var hei = $(this).getHeight(); var scrols = false; if(wid > dim.width || hei > dim.height) scrols = true; wid = Math.min(wid, dim.width); hei = Math.min(hei, dim.height); $('popdiv').style.width = wid+'px'; $('popdiv').style.height = hei+'px'; $('popdiv').style.marginTop = parseInt(dim['height']/2 - hei/2)+'px'; $('popdiv').style.marginLeft = parseInt(dim['width']/2 - wid/2)+'px'; $('popclose').style.top = parseInt(dim['height']/2 - hei/2 + (scrols ? 8 : 4))+'px'; $('popclose').style.left = parseInt(dim['width']/2 + wid/2 - $('popclose').getWidth() - (scrols ? 25 : (ischrome ? 15 : 4)))+'px'; $('popclose').show(); }; if(srcu.substring(0,4) != 'http') srcu = im+'dyn/'+srcu; imgu.src = srcu; }; function popClose() { won = false; $('popdiv').update(''); $('popload').hide(); if($('formerr')) $('formerr').hide(); }; function popPage(pag, wid, hei) { wid = parseInt(wid); hei = parseInt(hei); if(!wid || !hei || !pag) return; if(pag.substring(0,4) != 'http') pag = root+'phpsend/'+pag; new Ajax.Request(pag, { method:'get', onSuccess: function(transport) { var response = transport.responseText; $('popdiv').innerHTML = response; $('popclose').show(); if(response.match(/<input|<select|<textarea/g)) setInputs(); }, onLoading: function() { var dim = d.viewport.getDimensions(); popLoad(); $('popload').onclick = function() { if(!won) popClose(); else won = false; }; $('popclose').onclick = function() { won = false; }; $('popdiv').innerHTML = '<img id="popim" src="'+im+'default/loading_dark.gif" alt="please wait...">'; $('popclose').hide(); $('popload').show(); $('popdiv').style.width = wid+'px'; $('popdiv').style.height = hei+'px'; $('popim').style.paddingTop = parseInt(hei/2 - 16)+'px'; $('popim').style.paddingLeft = parseInt(wid/2 - 16)+'px'; $('popdiv').style.marginTop = parseInt(dim['height']/2 - hei/2)+'px'; $('popdiv').style.marginLeft = parseInt(dim['width']/2 - wid/2)+'px'; $('popclose').style.top = parseInt(dim['height']/2 - hei/2 + 8)+'px'; $('popclose').style.left = parseInt(dim['width']/2 + wid/2 - $('popclose').getWidth() - 7)+'px'; } }); }; var pngc = null; var pngI = -1; function correctPNG() { if(isie6) pngc = new PeriodicalExecuter(function(pe) { setPNG();} , 0.1); }; function setPNG() { pngI++; if(pngI == d.images.length) pngc.stop(); if(!d.images[pngI]) return; var img = d.images[pngI]; var imgName = img.src.toUpperCase(); if (imgName.substring(imgName.length-3, imgName.length) == "PNG") { var imgID = (img.id) ? 'id="' + img.id + '" ' : ''; var imgClass = (img.className) ? 'class="' + img.className + '" ' : ''; var imgTitle = (img.title) ? 'title="' + img.title + '" ' : ''; var imgonclick = (img.onclick) ? img.onclick.toString().substring(22,(img.onclick.toString().length-2)) : ''; var imgClick = (imgonclick) ? 'onclick="'+ imgonclick + '" ' : ''; var imgonmouseover = (img.onmouseover) ? img.onmouseover.toString().substring(22,(img.onmouseover.toString().length-2)) : ''; var imgMouseOver = (imgonmouseover) ? 'onmouseover="'+ imgonmouseover + '" ' : ''; var imgonmouseout = (img.onmouseout) ? img.onmouseout.toString().substring(22,(img.onmouseout.toString().length-2)) : ''; var imgMouseOut = (imgonmouseout) ? 'onmouseout="'+ imgonmouseout + '" ' : ''; var imgStyle = ''; if($(img).getStyle('background-image') != 'none') imgStyle += 'background-image:'+$(img).getStyle('background-image').replace(/"/g,'')+';'; if($(img).getStyle('background-color') != 'transparent') imgStyle += 'background-color:'+$(img).getStyle('background-color')+';'; if(imgStyle) { imgStyle += 'background-repeat:'+$(img).getStyle('background-repeat')+';'; imgStyle += 'background-position-x:'+$(img).getStyle('background-position-x')+';'; imgStyle += 'background-position-y:'+$(img).getStyle('background-position-y')+';'; }; var ori = new Array('left','right','top','bottom'); var imgDim = new Array($(img).getWidth(),$(img).getHeight()); for(var i=0;i<ori.length;i++) { var borderWid = parseInt($(img).getStyle('border-'+ori[i]+'-width')); if(borderWid) { imgStyle += 'border-'+ori[i]+':'+borderWid+'px solid '+$(img).getStyle('border-'+ori[i]+'-color')+';'; if(i > 1) imgDim[1] += -borderWid; else imgDim[0] += -borderWid; }; var padd = parseInt($(img).getStyle('padding-'+ori[i])); if(padd) { imgStyle += 'padding-'+ori[i]+':'+padd+'px;'; if(i > 1) imgDim[1] += -padd; else imgDim[0] += -padd; }; var marg = parseInt($(img).getStyle('margin-'+ori[i])); if(marg) imgStyle += 'margin-'+ori[i]+':'+marg+'px;'; }; if($(img).getStyle('position') != 'static') { imgStyle += 'position:'+$(img).getStyle('position')+';'; if($(img).getStyle('left')) imgStyle += 'left:'+$(img).getStyle('left')+';'; if($(img).getStyle('top')) imgStyle += 'left:'+$(img).getStyle('top')+';'; }; imgStyle += 'z-index:'+$(img).getStyle('z-index')+';'; imgStyle += 'width:'+imgDim[0]+'px;'; imgStyle += 'height:'+imgDim[1]+'px;'; imgStyle += 'display:'+$(img).getStyle('display')+';'; imgStyle += 'float:'+$(img).getStyle('float')+';'; img.outerHTML = '<span style="'+imgStyle+'" ' + imgID + imgClass + imgTitle + imgClick + imgMouseOver + imgMouseOut + '><span style="display:block;width:'+imgDim[0]+'px;height:'+imgDim[1]+'px;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + img.src + '\', sizingMethod=\'scale\');"></span></span> '; pngI = pngI-2; if(pngI < 0) pngI = 0; } }; function acpinit() { acp = true; setInputs(); swfUploadInit(); acpres(); if($('sorti')) Sortable.create('sorti',{tag:"div",delay:300,handle:"hand", onUpdate:function(element){ var els = element.immediateDescendants(); var ids = new Array(); for(var i=0;i<els.length;i++) ids.push(els[i].id.substring(4)); var sen = ''; var fid = els[0].id.substring(0,4); switch(fid) { case 'art_': sen = 'articles/artsort/'; break; case 'prd_': sen = 'products/prdsort/'; break; case 'prj_': sen = 'projects/prjsort/'; break; default: $('ajaxstatus').update(ero); return; }; phpSend(sen+ids.join('-'), 'ajaxstatus'); ids = ids.sortBy(function(id) {return parseInt(id);}); ids = ids.reverse(); for(var i=0;i<els.length;i++) els[i].id = fid+ids[i]; } }); if($('sortables')) { var els = $('sortables').immediateDescendants(); var sorts = new Array(); for(var i=0;i<els.length;i++) if(els[i].id.substring(0,5) == 'sort_') sorts.push(els[i].id); for(var i=0;i<sorts.length;i++) Sortable.create(sorts[i],{tag:"div",delay:300,handle:"hand", onUpdate:function(element){ var els = element.immediateDescendants(); var ids = new Array(); for(var i=0;i<els.length;i++) ids.push(parseInt(els[i].id.substring(4))); var catid = element.id.substring(element.id.indexOf('_', 5)+1); phpSend('products/catsort/'+catid+'/'+ids.join('-'), 'ajaxstatus'); ids = ids.sortBy(Prototype.K); for(var i=0;i<els.length;i++) els[i].id = 'cat_'+ids[i]; } }); } }; function acpres() { if(!$('body')) { alert('Nu ai \'body\'!'); return; }; window.onresize = function() {}; $('body').setStyle('float:left;width:100%;'); $('footer').setStyle('float:left;width:100%;'); var vdim = document.viewport.getDimensions(); var wind = $(d.body).firstDescendant(); vdim.width = Math.max(vdim.width, 999); wind.style.position = 'absolute'; wind.style.overflow = 'hidden'; wind.style.width = vdim.width+'px'; vdim.height += -$('footer').getHeight(); vdim.height += -$('header').getHeight(); if(vdim['height'] > $('body').getHeight()) $('body').style.height = vdim['height']+'px'; setTimeout('window.onresize = acpres',100); }; function acpset(set, val, phps) { location.href = root+'setacp-'+set+'-'+val; if(isie) event.returnValue=false; }; function langedit(where, k, val) { k = k.toPhp(); var phpline = root+'phpsend/langedit/'+k+'/'; var getlen = 1900 - phpline.length; var i = 0; while(val.length > getlen) { phpSend('langedit/'+i+'/'+k+'/'+val.substring(0, getlen).toPhp(), where); val = val.substring(getlen); i++; }; phpSend('langedit/fin/'+k+'/'+val.toPhp(), where); }; function selart(all) { var ins = d.save.elements; for(var i=0;i<ins.length;i++) if(ins[i].name.substring(0,4) == 'art_') ins[i].checked = all ? true : false; }; function apcartact(val) { var ins = d.save.elements; var ids = new Array(); for(var i=0;i<ins.length;i++) if(ins[i].name.substring(0,4) == 'art_' && ins[i].checked) ids.push(ins[i].parentNode.parentNode.parentNode.id.substring(4)); if(!ids.length) { d.save.actsel.selectedIndex = 0; return; }; if(val == 'artdel') { if(confirm(areyousure)) acpset(val, ids.join('-')); else d.save.actsel.selectedIndex = 0; return; }; acpset(val, ids.join('-')); }; function acptip(tex) { if(!$('mshtip')) { var deb = d.createElement('div'); deb.id = 'mshtip'; deb.style.color = '#333'; deb.style.backgroundColor = '#fcffde'; deb.style.fontSize = '11px'; deb.style.border = '1px solid #cccccc'; deb.style.position = 'absolute'; deb.style.padding = '10px 12px 10px 12px'; deb.style.zIndex = '100'; $(d.body).appendChild(deb); }; if(tex) { $('mshtip').style.left = (tempX+10)+'px'; $('mshtip').style.top = tempY+'px'; $('mshtip').innerHTML = tex; $('mshtip').show(); $(d.body).onclick = function() { if(won) { mtip(); $(d.body).onclick = function() {}; won = false; } else won = true; }; } else $('mshtip').hide(); }; function setDefImg(care) { var iid = care.up().up().id.substring(5); phpSend('products/setdef/'+iid); for(var i=0;i<imglen.length;i++) if(imglen[i] != iid) $('pimg_'+imglen[i]).down().next().innerHTML = '<a href="#" onclick="setDefImg(this);return false">'+setdefault+'</a>'; else $('pimg_'+imglen[i]).down().next().innerHTML = defaultt; }; function acpDelImg(care, tip) { if(!confirm(areyousure)) return; var unde = care.up().id; var iid = unde.substring(5); imglen = imglen.without(iid); phpSend(tip+'/delimg/'+iid, unde); }; function swfUploadInit() { if(typeof(SWFUpload) == 'undefined' || typeof(swfu) == 'undefined') return; new SWFUpload({ upload_url: root+"swfupload/"+swfu, post_params: {"PHPSESSID": PHPSESSID}, file_size_limit : "5 MB", file_types : "*.jpg;*.jpeg;*.gif;*.png;*.bmp", file_types_description : "Image Files", file_upload_limit : "0", file_queue_error_handler : fileQueueError, file_dialog_complete_handler : fileDialogComplete, upload_progress_handler : uploadProgress, upload_error_handler : uploadError, upload_success_handler : uploadSuccess, upload_complete_handler : uploadComplete, button_image_url : im+"default/spyglass.png", button_placeholder_id : "swfuButton", button_width: 200, button_height: 18, button_text : '<span class="button">'+selectimages+' <span class="buttonSmall">(5 MB Max)</span></span>', button_text_style : '.button {font-family: Helvetica, Arial, sans-serif;} .buttonSmall { font-size: 10px; }', button_text_top_padding: 0, button_text_left_padding: 18, button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT, button_cursor: SWFUpload.CURSOR.HAND, flash_url : root+"templates/swfupload.swf", custom_settings : { upload_target : "sfwuProgress" }, debug: false }); }; function addProjectsImage(sdata) { var iid = sdata.substring(0, sdata.indexOf(':')); var pimg = sdata.substring(sdata.indexOf(':')+1); imglen.push(iid); var deb = d.createElement('div'); deb.id = 'pimg_'+iid; deb.setStyle('height:100px;width:100%;'); deb.update('<div><img src="'+im+'dyn/'+pimg+'" height="90" alt="" onmousemove="acptip(\'<img src=\\\''+im+'dyn/'+pimg+'\\\' width=\\\'500\\\'>\')" onmouseout="acptip()"></div>'); $('thumbnails').appendChild(deb); if(d.getElementsByClassName('opt')[0].getHeight() > $('body').getHeight()-$('footer').getHeight()-3) $('body').style.height = '100%'; }; function addShopImage(sdata) { var iid = sdata.substring(0, sdata.indexOf(':')); var pthumb = sdata.substring(sdata.indexOf(':')+1); var pimg = pthumb.substring(pthumb.indexOf(':')+1); pthumb = pthumb.substring(0,pthumb.indexOf(':')); imglen.push(iid); var deb = d.createElement('div'); deb.id = 'pimg_'+iid; deb.setStyle('height:100px;width:100%;'); deb.innerHTML = '<div><img src="'+im+'dyn/'+pthumb+'" alt="" onmousemove="acptip(\'<img src=\\\''+im+'dyn/'+pimg+'\\\' width=\\\'500\\\'>\')" onmouseout="mtip()"></div>'; deb.innerHTML += '<div><a href="#" onclick="setDefImg(this);return false">'+setdefault+'</a></div><br><br><a href="#" onclick="acpDelImg(this, \'products\');return false">'+deletet+'</a>'; $('thumbnails').appendChild(deb); if(d.getElementsByClassName('opt')[0].getHeight() > $('body').getHeight()-$('footer').getHeight()-3) $('body').style.height = '100%'; }; function acpAddCDesc() { var deb = d.createElement('div'); deb.setStyle('float:left;width:100%;height:50px;'); deb.innerHTML = '<div style="width:15%;padding-left:7px;"><input type="text" class="text" onchange="acpSaveCDesc()" style="width:80%">:</div>'; deb.innerHTML += '<div style="width:82%;"><a href="#" onclick="this.up().up().remove();acpSaveCDesc();return false" class="progressCancel"></a><input type="text" class="text" onchange="acpSaveCDesc()" style="width:94%;"></div>'; $('customd').appendChild(deb); if(d.getElementsByClassName('artedit')[0].getHeight() > $('body').getHeight()-$('footer').getHeight()-3) $('body').style.height = '100%'; }; function acpAddSpec() { var deb = d.createElement('div'); deb.setStyle('float:left;width:100%;'); deb.innerHTML = '<div style="width:77%;padding-left:7px;"><input type="text" class="text" name="newdname[]"></div>'; deb.innerHTML += '<div style="width:20%;padding-left:7px;"><a href="#" onclick="this.up().up().remove();return false" class="progressCancel"></a><select name="newisfront[]" style="width:80%"><option>'+hiddent+'</option><option>'+displayedt+'</option></select></div>'; $('newspecs').appendChild(deb); if(d.getElementsByClassName('artedit')[0].getHeight() > $('body').getHeight()-$('footer').getHeight()-3) $('body').style.height = '100%'; }; function acpSaveCDesc() { var ins = $('customd').immediateDescendants(); d.save.pdesc.value = ''; var ke,va; for(var i=0;i<ins.length;i++) { ke = ins[i].down().down().value; va = ins[i].down().next().down().next().value; if(ke && va) d.save.pdesc.value += ke+'||'+va+'|||'; }; d.save.pdesc.value = d.save.pdesc.value.substring(0,d.save.pdesc.value.length-3); }; var Scriptaculous = { Version: '1.8.1', require: function(libraryName) { document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>'); }, REQUIRED_PROTOTYPE: '1.6.0', load: function() { function convertVersionString(versionString){ var r = versionString.split('.'); return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]); }; if((typeof Prototype=='undefined') || (typeof Element == 'undefined') || (typeof Element.Methods=='undefined') || (convertVersionString(Prototype.Version) < convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE))) throw("script.aculo.us requires the Prototype JavaScript framework >= " + Scriptaculous.REQUIRED_PROTOTYPE); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); (includes ? includes[1] : '').split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } }; Scriptaculous.load(); String.prototype.parseColor = function() { var color = '#'; if (this.slice(0,4) == 'rgb(') { var cols = this.slice(4,this.length-1).split(','); var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); } else { if (this.slice(0,1) == '#') { if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); if (this.length==7) color = this.toLowerCase(); } }; return (color.length==7 ? color : (arguments[0] || this)); }; Element.collectTextNodes = function(element) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : (node.hasChildNodes() ? Element.collectTextNodes(node) : '')); }).flatten().join(''); }; Element.collectTextNodesIgnoreClass = function(element, className) { return $A($(element).childNodes).collect( function(node) { return (node.nodeType==3 ? node.nodeValue : ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? Element.collectTextNodesIgnoreClass(node, className) : '')); }).flatten().join(''); }; Element.setContentZoom = function(element, percent) { element = $(element); element.setStyle({fontSize: (percent/100) + 'em'}); if (Prototype.Browser.WebKit) window.scrollBy(0,0); return element; }; Element.getInlineOpacity = function(element){ return $(element).style.opacity || ''; }; Element.forceRerendering = function(element) { try { element = $(element); var n = document.createTextNode(' '); element.appendChild(n); element.removeChild(n); } catch(e) { } }; var Effect = { _elementDoesNotExistError: { name: 'ElementDoesNotExistError', message: 'The specified DOM element does not exist, but is required for this effect to operate' }, Transitions: { linear: Prototype.K, sinoidal: function(pos) { return (-Math.cos(pos*Math.PI)/2) + 0.5; }, reverse: function(pos) { return 1-pos; }, flicker: function(pos) { var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; return pos > 1 ? 1 : pos; }, wobble: function(pos) { return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; }, pulse: function(pos, pulses) { pulses = pulses || 5; return ( ((pos % (1/pulses)) * pulses).round() == 0 ? ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 1 - ((pos * pulses * 2) - (pos * pulses * 2).floor()) ); }, spring: function(pos) { return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); }, none: function(pos) { return 0; }, full: function(pos) { return 1; } }, DefaultOptions: { duration:   1.0, fps:        100, sync:       false, from:       0.0, to:         1.0, delay:      0.0, queue:      'parallel' }, tagifyText: function(element) { var tagifyStyle = 'position:relative'; if (Prototype.Browser.IE) tagifyStyle += ';zoom:1'; element = $(element); $A(element.childNodes).each( function(child) { if (child.nodeType==3) { child.nodeValue.toArray().each( function(character) { element.insertBefore( new Element('span', {style: tagifyStyle}).update( character == ' ' ? String.fromCharCode(160) : character), child); }); Element.remove(child); } }); }, multiple: function(element, effect) { var elements; if (((typeof element == 'object') || Object.isFunction(element)) && (element.length)) elements = element; else elements = $(element).childNodes; var options = Object.extend({ speed: 0.1, delay: 0.0 }, arguments[2] || { }); var masterDelay = options.delay; $A(elements).each( function(element, index) { new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); }); }, PAIRS: { 'slide':  ['SlideDown','SlideUp'], 'blind':  ['BlindDown','BlindUp'], 'appear': ['Appear','Fade'] }, toggle: function(element, effect) { element = $(element); effect = (effect || 'appear').toLowerCase(); var options = Object.extend({ queue: { position:'end', scope:(element.id || 'global'), limit: 1 } }, arguments[2] || { }); Effect[element.visible() ? Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); } }; Effect.DefaultOptions.transition = Effect.Transitions.sinoidal; Effect.ScopedQueue = Class.create(Enumerable, { initialize: function() { this.effects  = []; this.interval = null; }, _each: function(iterator) { this.effects._each(iterator); }, add: function(effect) { var timestamp = new Date().getTime(); var position = Object.isString(effect.options.queue) ? effect.options.queue : effect.options.queue.position; switch(position) { case 'front': this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { e.startOn  += effect.finishOn; e.finishOn += effect.finishOn; }); break; case 'with-last': timestamp = this.effects.pluck('startOn').max() || timestamp; break; case 'end': timestamp = this.effects.pluck('finishOn').max() || timestamp; break; }; effect.startOn  += timestamp; effect.finishOn += timestamp; if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) this.effects.push(effect); if (!this.interval) this.interval = setInterval(this.loop.bind(this), 15); }, remove: function(effect) { this.effects = this.effects.reject(function(e) { return e==effect }); if (this.effects.length == 0) { clearInterval(this.interval); this.interval = null; } }, loop: function() { var timePos = new Date().getTime(); for(var i=0, len=this.effects.length;i<len;i++) this.effects[i] && this.effects[i].loop(timePos); } }); Effect.Queues = { instances: $H(), get: function(queueName) { if (!Object.isString(queueName)) return queueName; return this.instances.get(queueName) || this.instances.set(queueName, new Effect.ScopedQueue()); } }; Effect.Queue = Effect.Queues.get('global'); Effect.Base = Class.create({ position: null, start: function(options) { function codeForEvent(options,eventName){ return ( (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') + (options[eventName] ? 'this.options.'+eventName+'(this);' : '') ); }; if (options && options.transition === false) options.transition = Effect.Transitions.linear; this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { }); this.currentFrame = 0; this.state        = 'idle'; this.startOn      = this.options.delay*1000; this.finishOn     = this.startOn+(this.options.duration*1000); this.fromToDelta  = this.options.to-this.options.from; this.totalTime    = this.finishOn-this.startOn; this.totalFrames  = this.options.fps*this.options.duration; eval('this.render = function(pos){ '+ 'if (this.state=="idle"){this.state="running";'+ codeForEvent(this.options,'beforeSetup')+ (this.setup ? 'this.setup();':'')+ codeForEvent(this.options,'afterSetup')+ '};if (this.state=="running"){'+ 'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+ 'this.position=pos;'+ codeForEvent(this.options,'beforeUpdate')+ (this.update ? 'this.update(pos);':'')+ codeForEvent(this.options,'afterUpdate')+ '}}'); this.event('beforeStart'); if (!this.options.sync) Effect.Queues.get(Object.isString(this.options.queue) ? 'global' : this.options.queue.scope).add(this); }, loop: function(timePos) { if (timePos >= this.startOn) { if (timePos >= this.finishOn) { this.render(1.0); this.cancel(); this.event('beforeFinish'); if (this.finish) this.finish(); this.event('afterFinish'); return; }; var pos   = (timePos - this.startOn) / this.totalTime, frame = (pos * this.totalFrames).round(); if (frame > this.currentFrame) { this.render(pos); this.currentFrame = frame; } } }, cancel: function() { if (!this.options.sync) Effect.Queues.get(Object.isString(this.options.queue) ? 'global' : this.options.queue.scope).remove(this); this.state = 'finished'; }, event: function(eventName) { if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); if (this.options[eventName]) this.options[eventName](this); }, inspect: function() { var data = $H(); for(property in this) if (!Object.isFunction(this[property])) data.set(property, this[property]); return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>'; } }); Effect.Parallel = Class.create(Effect.Base, { initialize: function(effects) { this.effects = effects || []; this.start(arguments[1]); }, update: function(position) { this.effects.invoke('render', position); }, finish: function(position) { this.effects.each( function(effect) { effect.render(1.0); effect.cancel(); effect.event('beforeFinish'); if (effect.finish) effect.finish(position); effect.event('afterFinish'); }); } }); Effect.Tween = Class.create(Effect.Base, { initialize: function(object, from, to) { object = Object.isString(object) ? $(object) : object; var args = $A(arguments), method = args.last(), options = args.length == 5 ? args[3] : null; this.method = Object.isFunction(method) ? method.bind(object) : Object.isFunction(object[method]) ? object[method].bind(object) : function(value) { object[method] = value }; this.start(Object.extend({ from: from, to: to }, options || { })); }, update: function(position) { this.method(position); } }); Effect.Event = Class.create(Effect.Base, { initialize: function() { this.start(Object.extend({ duration: 0 }, arguments[0] || { })); }, update: Prototype.emptyFunction }); Effect.Opacity = Class.create(Effect.Base, { initialize: function(element) { this.element = $(element); if (!this.element) throw(Effect._elementDoesNotExistError); if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); var options = Object.extend({ from: this.element.getOpacity() || 0.0, to:   1.0 }, arguments[1] || { }); this.start(options); }, update: function(position) { this.element.setOpacity(position); } }); Effect.Move = Class.create(Effect.Base, { initialize: function(element) { this.element = $(element); if (!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ x:    0, y:    0, mode: 'relative' }, arguments[1] || { }); this.start(options); }, setup: function() { this.element.makePositioned(); this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); this.originalTop  = parseFloat(this.element.getStyle('top')  || '0'); if (this.options.mode == 'absolute') { this.options.x = this.options.x - this.originalLeft; this.options.y = this.options.y - this.originalTop; } }, update: function(position) { if(this.options.x) this.element.setStyle({ left: (this.options.x  * position + this.originalLeft).round() + 'px' }); this.element.setStyle({ top:  (this.options.y  * position + this.originalTop).round()  + 'px' }); } }); Effect.MoveBy = function(element, toTop, toLeft, modet) { if (!modet) modet = 'realative'; return new Effect.Move(element, Object.extend({ x: toLeft, y: toTop, mode: modet}, arguments[4] || { })); }; Effect.Scale = Class.create(Effect.Base, { initialize: function(element, percent) { this.element = $(element); if (!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ scaleX: true, scaleY: true, scaleContent: true, scaleFromCenter: false, scaleMode: 'box', scaleFrom: 100.0, scaleTo:   percent }, arguments[2] || { }); this.start(options); }, setup: function() { this.restoreAfterFinish = this.options.restoreAfterFinish || false; this.elementPositioning = this.element.getStyle('position'); this.originalStyle = { }; ['top','left','width','height','fontSize'].each( function(k) { this.originalStyle[k] = this.element.style[k]; }.bind(this)); this.originalTop  = this.element.offsetTop; this.originalLeft = this.element.offsetLeft; var fontSize = this.element.getStyle('font-size') || '100%'; ['em','px','%','pt'].each( function(fontSizeType) { if (fontSize.indexOf(fontSizeType)>0) { this.fontSize     = parseFloat(fontSize); this.fontSizeType = fontSizeType; } }.bind(this)); this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; this.dims = null; if (this.options.scaleMode=='box') this.dims = [this.element.offsetHeight, this.element.offsetWidth]; if (/^content/.test(this.options.scaleMode)) this.dims = [this.element.scrollHeight, this.element.scrollWidth]; if (!this.dims) this.dims = [this.options.scaleMode.originalHeight, this.options.scaleMode.originalWidth]; }, update: function(position) { var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); if (this.options.scaleContent && this.fontSize) this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); }, finish: function(position) { if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); }, setDimensions: function(height, width) { var d = { }; if (this.options.scaleX) d.width = width.round() + 'px'; if (this.options.scaleY) d.height = height.round() + 'px'; if (this.options.scaleFromCenter) { var topd  = (height - this.dims[0])/2; var leftd = (width  - this.dims[1])/2; if (this.elementPositioning == 'absolute') { if (this.options.scaleY) d.top = this.originalTop-topd + 'px'; if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; } else { if (this.options.scaleY) d.top = -topd + 'px'; if (this.options.scaleX) d.left = -leftd + 'px'; } }; this.element.setStyle(d); } }); Effect.Highlight = Class.create(Effect.Base, { initialize: function(element) { this.element = $(element); if (!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { }); this.start(options); }, setup: function() { if (this.element.getStyle('display')=='none') { this.cancel(); return; }; this.oldStyle = { }; if (!this.options.keepBackgroundImage) { this.oldStyle.backgroundImage = this.element.getStyle('background-image'); this.element.setStyle({backgroundImage: 'none'}); }; if (!this.options.endcolor) this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); if (!this.options.restorecolor) this.options.restorecolor = this.element.getStyle('background-color'); this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); }, update: function(position) { this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) }); }, finish: function() { this.element.setStyle(Object.extend(this.oldStyle, { backgroundColor: this.options.restorecolor })); } }); Effect.ScrollTo = function(element) { var options = arguments[1] || { }, scrollOffsets = document.viewport.getScrollOffsets(), elementOffsets = $(element).cumulativeOffset(), max = (window.height || document.body.scrollHeight) - document.viewport.getHeight(); if (options.offset) elementOffsets[1] += options.offset; return new Effect.Tween(null, scrollOffsets.top, elementOffsets[1] > max ? max : elementOffsets[1], options, function(p){ scrollTo(scrollOffsets.left, p.round()) } ); }; Effect.Fade = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); var options = Object.extend({ from: element.getOpacity() || 1.0, to:   0.0, afterFinishInternal: function(effect) { if (effect.options.to!=0) return; effect.element.hide().setStyle({opacity: oldOpacity}); } }, arguments[1] || { }); return new Effect.Opacity(element,options); }; Effect.Appear = function(element) { element = $(element); var options = Object.extend({ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), to:   1.0, afterFinishInternal: function(effect) { effect.element.forceRerendering(); }, beforeSetup: function(effect) { effect.element.setOpacity(effect.options.from).show(); }}, arguments[1] || { }); return new Effect.Opacity(element,options); }; Effect.Puff = function(element) { element = $(element); var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position'), top:  element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; return new Effect.Parallel( [ new Effect.Scale(element, 200, { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], Object.extend({ duration: 1.0, beforeSetupInternal: function(effect) { Position.absolutize(effect.effects[0].element) }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().setStyle(oldStyle); } }, arguments[1] || { }) ); }; Effect.BlindUp = function(element) { element = $(element); element.makeClipping(); return new Effect.Scale(element, 0, Object.extend({ scaleContent: false, scaleX: false, restoreAfterFinish: true, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }, arguments[1] || { }) ); }; Effect.BlindDown = function(element) { element = $(element); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: 0, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.element.undoClipping(); } }, arguments[1] || { })); }; Effect.SwitchOff = function(element) { element = $(element); var oldOpacity = element.getInlineOpacity(); return new Effect.Appear(element, Object.extend({ duration: 0.4, from: 0, transition: Effect.Transitions.flicker, afterFinishInternal: function(effect) { new Effect.Scale(effect.element, 1, { duration: 0.3, scaleFromCenter: true, scaleX: false, scaleContent: false, restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); } }) } }, arguments[1] || { })); }; Effect.DropOut = function(element) { element = $(element); var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left'), opacity: element.getInlineOpacity() }; return new Effect.Parallel( [ new Effect.Move(element, {x: 0, y: 100, sync: true }), new Effect.Opacity(element, { sync: true, to: 0.0 }) ], Object.extend( { duration: 0.5, beforeSetup: function(effect) { effect.effects[0].element.makePositioned(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); } }, arguments[1] || { })); }; Effect.Shake = function(element) { element = $(element); var options = Object.extend({ distance: 20, duration: 0.5 }, arguments[1] || {}); var distance = parseFloat(options.distance); var split = parseFloat(options.duration) / 10.0; var oldStyle = { top: element.getStyle('top'), left: element.getStyle('left') }; return new Effect.Move(element, { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) { new Effect.Move(effect.element, { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) { effect.element.undoPositioned().setStyle(oldStyle); }}) }}) }}) }}) }}) }}); }; Effect.SlideDown = function(element) { element = $(element).cleanWhitespace(); var oldInnerBottom = element.down().getStyle('bottom'); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, 100, Object.extend({ scaleContent: false, scaleX: false, scaleFrom: window.opera ? 0 : 1, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if (window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().setStyle({height: '0px'}).show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } }, arguments[1] || { }) ); }; Effect.SlideUp = function(element) { element = $(element).cleanWhitespace(); var oldInnerBottom = element.down().getStyle('bottom'); var elementDimensions = element.getDimensions(); return new Effect.Scale(element, window.opera ? 0 : 1, Object.extend({ scaleContent: false, scaleX: false, scaleMode: 'box', scaleFrom: 100, scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, restoreAfterFinish: true, afterSetup: function(effect) { effect.element.makePositioned(); effect.element.down().makePositioned(); if (window.opera) effect.element.setStyle({top: ''}); effect.element.makeClipping().show(); }, afterUpdateInternal: function(effect) { effect.element.down().setStyle({bottom: (effect.dims[0] - effect.element.clientHeight) + 'px' }); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().undoPositioned(); effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } }, arguments[1] || { }) ); }; Effect.Squish = function(element) { return new Effect.Scale(element, window.opera ? 1 : 0, { restoreAfterFinish: true, beforeSetup: function(effect) { effect.element.makeClipping(); }, afterFinishInternal: function(effect) { effect.element.hide().undoClipping(); } }); }; Effect.Grow = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.full }, arguments[1] || { }); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var initialMoveX, initialMoveY; var moveX, moveY; switch (options.direction) { case 'top-left': initialMoveX = initialMoveY = moveX = moveY = 0; break; case 'top-right': initialMoveX = dims.width; initialMoveY = moveY = 0; moveX = -dims.width; break; case 'bottom-left': initialMoveX = moveX = 0; initialMoveY = dims.height; moveY = -dims.height; break; case 'bottom-right': initialMoveX = dims.width; initialMoveY = dims.height; moveX = -dims.width; moveY = -dims.height; break; case 'center': initialMoveX = dims.width / 2; initialMoveY = dims.height / 2; moveX = -dims.width / 2; moveY = -dims.height / 2; break; }; return new Effect.Move(element, { x: initialMoveX, y: initialMoveY, duration: 0.01, beforeSetup: function(effect) { effect.element.hide().makeClipping().makePositioned(); }, afterFinishInternal: function(effect) { new Effect.Parallel( [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), new Effect.Scale(effect.element, 100, { scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) ], Object.extend({ beforeSetup: function(effect) { effect.effects[0].element.setStyle({height: '0px'}).show(); }, afterFinishInternal: function(effect) { effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ) } }); }; Effect.Shrink = function(element) { element = $(element); var options = Object.extend({ direction: 'center', moveTransition: Effect.Transitions.sinoidal, scaleTransition: Effect.Transitions.sinoidal, opacityTransition: Effect.Transitions.none }, arguments[1] || { }); var oldStyle = { top: element.style.top, left: element.style.left, height: element.style.height, width: element.style.width, opacity: element.getInlineOpacity() }; var dims = element.getDimensions(); var moveX, moveY; switch (options.direction) { case 'top-left': moveX = moveY = 0; break; case 'top-right': moveX = dims.width; moveY = 0; break; case 'bottom-left': moveX = 0; moveY = dims.height; break; case 'bottom-right': moveX = dims.width; moveY = dims.height; break; case 'center': moveX = dims.width / 2; moveY = dims.height / 2; break; }; return new Effect.Parallel( [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) ], Object.extend({ beforeStartInternal: function(effect) { effect.effects[0].element.makePositioned().makeClipping(); }, afterFinishInternal: function(effect) { effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } }, options) ); }; Effect.Pulsate = function(element) { element = $(element); var options    = arguments[1] || { }; var oldOpacity = element.getInlineOpacity(); var transition = options.transition || Effect.Transitions.sinoidal; var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; reverser.bind(transition); return new Effect.Opacity(element, Object.extend(Object.extend({  duration: 2.0, from: 0, afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } }, options), {transition: reverser})); }; Effect.Fold = function(element) { element = $(element); var oldStyle = { top: element.style.top, left: element.style.left, width: element.style.width, height: element.style.height }; element.makeClipping(); return new Effect.Scale(element, 5, Object.extend({ scaleContent: false, scaleX: false, afterFinishInternal: function(effect) { new Effect.Scale(element, 1, { scaleContent: false, scaleY: false, afterFinishInternal: function(effect) { effect.element.hide().undoClipping().setStyle(oldStyle); } }); }}, arguments[1] || { })); }; Effect.Morph = Class.create(Effect.Base, { initialize: function(element) { this.element = $(element); if (!this.element) throw(Effect._elementDoesNotExistError); var options = Object.extend({ style: { } }, arguments[1] || { }); if (!Object.isString(options.style)) this.style = $H(options.style); else { if (options.style.include(':')) this.style = options.style.parseStyle(); else { this.element.addClassName(options.style); this.style = $H(this.element.getStyles()); this.element.removeClassName(options.style); var css = this.element.getStyles(); this.style = this.style.reject(function(style) { return style.value == css[style.key]; }); options.afterFinishInternal = function(effect) { effect.element.addClassName(effect.options.style); effect.transforms.each(function(transform) { effect.element.style[transform.style] = ''; }); } } }; this.start(options); }, setup: function(){ function parseColor(color){ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; color = color.parseColor(); return $R(0,2).map(function(i){ return parseInt( color.slice(i*2+1,i*2+3), 16 ) }); }; this.transforms = this.style.map(function(pair){ var property = pair[0], value = pair[1], unit = null; if (value.parseColor('#zzzzzz') != '#zzzzzz') { value = value.parseColor(); unit  = 'color'; } else if (property == 'opacity') { value = parseFloat(value); if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) this.element.setStyle({zoom: 1}); } else if (Element.CSS_LENGTH.test(value)) { var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); value = parseFloat(components[1]); unit = (components.length == 3) ? components[2] : null; }; var originalValue = this.element.getStyle(property); return { style: property.camelize(), originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), targetValue: unit=='color' ? parseColor(value) : value, unit: unit }; }.bind(this)).reject(function(transform){ return ( (transform.originalValue == transform.targetValue) || ( transform.unit != 'color' && (isNaN(transform.originalValue) || isNaN(transform.targetValue)) ) ) }); }, update: function(position) { var style = { }, transform, i = this.transforms.length; while(i--); style[(transform = this.transforms[i]).style] = transform.unit=='color' ? '#'+ (Math.round(transform.originalValue[0]+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() + (Math.round(transform.originalValue[1]+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() + (Math.round(transform.originalValue[2]+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() : (transform.originalValue + (transform.targetValue - transform.originalValue) * position).toFixed(3) + (transform.unit === null ? '' : transform.unit); this.element.setStyle(style, true); } }); Effect.Transform = Class.create({ initialize: function(tracks){ this.tracks  = []; this.options = arguments[1] || { }; this.addTracks(tracks); }, addTracks: function(tracks){ tracks.each(function(track){ track = $H(track); var data = track.values().first(); this.tracks.push($H({ ids:     track.keys().first(), effect:  Effect.Morph, options: { style: data } })); }.bind(this)); return this; }, play: function(){ return new Effect.Parallel( this.tracks.map(function(track){ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options'); var elements = [$(ids) || $$(ids)].flatten(); return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) }); }).flatten(), this.options ); } }); Element.CSS_PROPERTIES = $w( 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + 'fontSize fontWeight height left letterSpacing lineHeight ' + 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + 'right textIndent top width wordSpacing zIndex'); Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; String.__parseStyleElement = document.createElement('div'); String.prototype.parseStyle = function(){ var style, styleRules = $H(); if (Prototype.Browser.WebKit) style = new Element('div',{style:this}).style; else { String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>'; style = String.__parseStyleElement.childNodes[0].style; }; Element.CSS_PROPERTIES.each(function(property){ if (style[property]) styleRules.set(property, style[property]); }); if (Prototype.Browser.IE && this.include('opacity')) styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]); return styleRules; }; if (document.defaultView && document.defaultView.getComputedStyle) { Element.getStyles = function(element) { var css = document.defaultView.getComputedStyle($(element), null); return Element.CSS_PROPERTIES.inject({ }, function(styles, property) { styles[property] = css[property]; return styles; }); }; } else { Element.getStyles = function(element) { element = $(element); var css = element.currentStyle, styles; styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) { results[property] = css[property]; return results; }); if (!styles.opacity) styles.opacity = element.getOpacity(); return styles; }; }; Effect.Methods = { morph: function(element, style) { element = $(element); new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { })); return element; }, visualEffect: function(element, effect, options) { element = $(element); var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1); new Effect[klass](element, options); return element; }, highlight: function(element, options) { element = $(element); new Effect.Highlight(element, options); return element; } }; $w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+ 'pulsate shake puff squish switchOff dropOut').each( function(effect) { Effect.Methods[effect] = function(element, options){ element = $(element); Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options); return element; } } ); $w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( function(f) { Effect.Methods[f] = Element[f]; } ); Element.addMethods(Effect.Methods); if(Object.isUndefined(Effect)) throw("dragdrop.js requires including script.aculo.us' effects.js library"); var Droppables = { drops: [], remove: function(element) { this.drops = this.drops.reject(function(d) { return d.element==$(element) }); }, add: function(element) { element = $(element); var options = Object.extend({ greedy:     true, hoverclass: null, tree:       false }, arguments[1] || { }); if(options.containment) { options._containers = []; var containment = options.containment; if(Object.isArray(containment)) { containment.each( function(c) { options._containers.push($(c)) }); } else { options._containers.push($(containment)); } }; if(options.accept) options.accept = [options.accept].flatten(); Element.makePositioned(element); options.element = element; this.drops.push(options); }, findDeepestChild: function(drops) { deepest = drops[0]; for (i = 1; i < drops.length; ++i) if (Element.isParent(drops[i].element, deepest.element)) deepest = drops[i]; return deepest; }, isContained: function(element, drop) { var containmentNode; if(drop.tree) { containmentNode = element.treeNode; } else { containmentNode = element.parentNode; }; return drop._containers.detect(function(c) { return containmentNode == c }); }, isAffected: function(point, element, drop) { return ( (drop.element!=element) && ((!drop._containers) || this.isContained(element, drop)) && ((!drop.accept) || (Element.classNames(element).detect( function(v) { return drop.accept.include(v) } ) )) && Position.within(drop.element, point[0], point[1]) ); }, deactivate: function(drop) { if(drop.hoverclass) Element.removeClassName(drop.element, drop.hoverclass); this.last_active = null; }, activate: function(drop) { if(drop.hoverclass) Element.addClassName(drop.element, drop.hoverclass); this.last_active = drop; }, show: function(point, element) { if(!this.drops.length) return; var drop, affected = []; this.drops.each( function(drop) { if(Droppables.isAffected(point, element, drop)) affected.push(drop); }); if(affected.length>0) drop = Droppables.findDeepestChild(affected); if(this.last_active && this.last_active != drop) this.deactivate(this.last_active); if (drop) { Position.within(drop.element, point[0], point[1]); if(drop.onHover) drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); if (drop != this.last_active) Droppables.activate(drop); } }, fire: function(event, element) { if(!this.last_active) return; Position.prepare(); if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active)) if (this.last_active.onDrop) { this.last_active.onDrop(element, this.last_active.element, event); return true; } }, reset: function() { if(this.last_active) this.deactivate(this.last_active); } }; var Draggables = { drags: [], observers: [], register: function(draggable) { if(this.drags.length == 0) { this.eventMouseUp   = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.updateDrag.bindAsEventListener(this); this.eventKeypress  = this.keyPress.bindAsEventListener(this); Event.observe(document, "mouseup", this.eventMouseUp); Event.observe(document, "mousemove", this.eventMouseMove); Event.observe(document, "keypress", this.eventKeypress); }; this.drags.push(draggable); }, unregister: function(draggable) { this.drags = this.drags.reject(function(d) { return d==draggable }); if(this.drags.length == 0) { Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); Event.stopObserving(document, "keypress", this.eventKeypress); } }, activate: function(draggable) { if(draggable.options.delay) { this._timeout = setTimeout(function() { Draggables._timeout = null; window.focus(); Draggables.activeDraggable = draggable; }.bind(this), draggable.options.delay); } else { window.focus(); this.activeDraggable = draggable; } }, deactivate: function() { this.activeDraggable = null; }, updateDrag: function(event) { if(!this.activeDraggable) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return; this._lastPointer = pointer; this.activeDraggable.updateDrag(event, pointer); }, endDrag: function(event) { if(this._timeout) { clearTimeout(this._timeout); this._timeout = null; }; if(!this.activeDraggable) return; this._lastPointer = null; this.activeDraggable.endDrag(event); this.activeDraggable = null; }, keyPress: function(event) { if(this.activeDraggable) this.activeDraggable.keyPress(event); }, addObserver: function(observer) { this.observers.push(observer); this._cacheObserverCallbacks(); }, removeObserver: function(element) { this.observers = this.observers.reject( function(o) { return o.element==element }); this._cacheObserverCallbacks(); }, notify: function(eventName, draggable, event) { if(this[eventName+'Count'] > 0) this.observers.each( function(o) { if(o[eventName]) o[eventName](eventName, draggable, event); }); if(draggable.options[eventName]) draggable.options[eventName](draggable, event); }, _cacheObserverCallbacks: function() { ['onStart','onEnd','onDrag'].each( function(eventName) { Draggables[eventName+'Count'] = Draggables.observers.select( function(o) { return o[eventName]; } ).length; }); } }; var Draggable = Class.create({ initialize: function(element) { var defaults = { handle: false, reverteffect: function(element, top_offset, left_offset) { var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02; new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur, queue: {scope:'_draggable', position:'end'} }); }, endeffect: function(element) { var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0; new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, queue: {scope:'_draggable', position:'end'}, afterFinish: function(){ Draggable._dragging[element] = false } }); }, zindex: 1000, revert: false, quiet: false, scroll: false, scrollSensitivity: 20, scrollSpeed: 15, snap: false, delay: 0 }; if(!arguments[1] || Object.isUndefined(arguments[1].endeffect)) Object.extend(defaults, { starteffect: function(element) { element._opacity = Element.getOpacity(element); Draggable._dragging[element] = true; new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); } }); var options = Object.extend(defaults, arguments[1] || { }); this.element = $(element); if(options.handle && Object.isString(options.handle)) this.handle = this.element.down('.'+options.handle, 0); if(!this.handle) this.handle = $(options.handle); if(!this.handle) this.handle = this.element; if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { options.scroll = $(options.scroll); this._isScrollChild = Element.childOf(this.element, options.scroll); }; Element.makePositioned(this.element); this.options  = options; this.dragging = false; this.eventMouseDown = this.initDrag.bindAsEventListener(this); Event.observe(this.handle, "mousedown", this.eventMouseDown); Draggables.register(this); }, destroy: function() { Event.stopObserving(this.handle, "mousedown", this.eventMouseDown); Draggables.unregister(this); }, currentDelta: function() { return([ parseInt(Element.getStyle(this.element,'left') || '0'), parseInt(Element.getStyle(this.element,'top') || '0')]); }, initDrag: function(event) { if(!Object.isUndefined(Draggable._dragging[this.element]) && Draggable._dragging[this.element]) return; if(Event.isLeftClick(event)) { var src = Event.element(event); if((tag_name = src.tagName.toUpperCase()) && ( tag_name=='INPUT' || tag_name=='SELECT' || tag_name=='OPTION' || tag_name=='BUTTON' || tag_name=='TEXTAREA')) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; var pos     = Position.cumulativeOffset(this.element); this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); Draggables.activate(this); Event.stop(event); } }, startDrag: function(event) { this.dragging = true; if(!this.delta) this.delta = this.currentDelta(); if(this.options.zindex) { this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0); this.element.style.zIndex = this.options.zindex; }; if(this.options.ghosting) { this._clone = this.element.cloneNode(true); this.element._originallyAbsolute = (this.element.getStyle('position') == 'absolute'); if (!this.element._originallyAbsolute) Position.absolutize(this.element); this.element.parentNode.insertBefore(this._clone, this.element); }; if(this.options.scroll) { if (this.options.scroll == window) { var where = this._getWindowScroll(this.options.scroll); this.originalScrollLeft = where.left; this.originalScrollTop = where.top; } else { this.originalScrollLeft = this.options.scroll.scrollLeft; this.originalScrollTop = this.options.scroll.scrollTop; } }; Draggables.notify('onStart', this, event); if(this.options.starteffect) this.options.starteffect(this.element); }, updateDrag: function(event, pointer) { if(!this.dragging) this.startDrag(event); if(!this.options.quiet){ Position.prepare(); Droppables.show(pointer, this.element); }; Draggables.notify('onDrag', this, event); this.draw(pointer); if(this.options.change) this.options.change(this); if(this.options.scroll) { this.stopScrolling(); var p; if (this.options.scroll == window) { with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } } else { p = Position.page(this.options.scroll); p[0] += this.options.scroll.scrollLeft + Position.deltaX; p[1] += this.options.scroll.scrollTop + Position.deltaY; p.push(p[0]+this.options.scroll.offsetWidth); p.push(p[1]+this.options.scroll.offsetHeight); }; var speed = [0,0]; if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity); if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity); if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity); this.startScrolling(speed); }; if(Prototype.Browser.WebKit) window.scrollBy(0,0); Event.stop(event); }, finishDrag: function(event, success) { this.dragging = false; if(this.options.quiet){ Position.prepare(); var pointer = [Event.pointerX(event), Event.pointerY(event)]; Droppables.show(pointer, this.element); }; if(this.options.ghosting) { if (!this.element._originallyAbsolute) Position.relativize(this.element); if(this.element._originallyAbsolute) delete this.element._originallyAbsolute; Element.remove(this._clone); this._clone = null; }; var dropped = false; if(success) { dropped = Droppables.fire(event, this.element); if (!dropped) dropped = false; }; if(dropped && this.options.onDropped) this.options.onDropped(this.element); Draggables.notify('onEnd', this, event); var revert = this.options.revert; if(revert && Object.isFunction(revert)) revert = revert(this.element); var d = this.currentDelta(); if(revert && this.options.reverteffect) { if (dropped == 0 || revert != 'failure') this.options.reverteffect(this.element, d[1]-this.delta[1], d[0]-this.delta[0]); } else { this.delta = d; }; if(this.options.zindex) this.element.style.zIndex = this.originalZ; if(this.options.endeffect) this.options.endeffect(this.element); Draggables.deactivate(this); Droppables.reset(); }, keyPress: function(event) { if(event.keyCode!=Event.KEY_ESC) return; this.finishDrag(event, false); Event.stop(event); }, endDrag: function(event) { if(!this.dragging) return; this.stopScrolling(); this.finishDrag(event, true); Event.stop(event); }, draw: function(point) { var pos = Position.cumulativeOffset(this.element); if(this.options.ghosting) { var r   = Position.realOffset(this.element); pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; }; var d = this.currentDelta(); pos[0] -= d[0]; pos[1] -= d[1]; if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) { pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; }; var p = [0,1].map(function(i){ return (point[i]-pos[i]-this.offset[i]) }.bind(this)); if(this.options.snap) { if(Object.isFunction(this.options.snap)) { p = this.options.snap(p[0],p[1],this); } else { if(Object.isArray(this.options.snap)) { p = p.map( function(v, i) { return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this)) } else { p = p.map( function(v) { return (v/this.options.snap).round()*this.options.snap }.bind(this)) } }}; var style = this.element.style; if((!this.options.constraint) || (this.options.constraint=='horizontal')) style.left = p[0] + "px"; if((!this.options.constraint) || (this.options.constraint=='vertical')) style.top  = p[1] + "px"; if(style.visibility=="hidden") style.visibility = ""; }, stopScrolling: function() { if(this.scrollInterval) { clearInterval(this.scrollInterval); this.scrollInterval = null; Draggables._lastScrollPointer = null; } }, startScrolling: function(speed) { if(!(speed[0] || speed[1])) return; this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed]; this.lastScrolled = new Date(); this.scrollInterval = setInterval(this.scroll.bind(this), 10); }, scroll: function() { var current = new Date(); var delta = current - this.lastScrolled; this.lastScrolled = current; if(this.options.scroll == window) { with (this._getWindowScroll(this.options.scroll)) { if (this.scrollSpeed[0] || this.scrollSpeed[1]) { var d = delta / 1000; this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); } } } else { this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000; }; Position.prepare(); Droppables.show(Draggables._lastPointer, this.element); Draggables.notify('onDrag', this); if (this._isScrollChild) { Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer); Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000; Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000; if (Draggables._lastScrollPointer[0] < 0) Draggables._lastScrollPointer[0] = 0; if (Draggables._lastScrollPointer[1] < 0) Draggables._lastScrollPointer[1] = 0; this.draw(Draggables._lastScrollPointer); }; if(this.options.change) this.options.change(this); }, _getWindowScroll: function(w) { var T, L, W, H; with (w.document) { if (w.document.documentElement && documentElement.scrollTop) { T = documentElement.scrollTop; L = documentElement.scrollLeft; } else if (w.document.body) { T = body.scrollTop; L = body.scrollLeft; }; if (w.innerWidth) { W = w.innerWidth; H = w.innerHeight; } else if (w.document.documentElement && documentElement.clientWidth) { W = documentElement.clientWidth; H = documentElement.clientHeight; } else { W = body.offsetWidth; H = body.offsetHeight } }; return { top: T, left: L, width: W, height: H }; } }); Draggable._dragging = { }; var SortableObserver = Class.create({ initialize: function(element, observer) { this.element   = $(element); this.observer  = observer; this.lastValue = Sortable.serialize(this.element); }, onStart: function() { this.lastValue = Sortable.serialize(this.element); }, onEnd: function() { Sortable.unmark(); if(this.lastValue != Sortable.serialize(this.element)) this.observer(this.element) } }); var Sortable = { SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/, sortables: { }, _findRootElement: function(element) { while (element.tagName.toUpperCase() != "BODY") { if(element.id && Sortable.sortables[element.id]) return element; element = element.parentNode; } }, options: function(element) { element = Sortable._findRootElement($(element)); if(!element) return; return Sortable.sortables[element.id]; }, destroy: function(element){ var s = Sortable.options(element); if(s) { Draggables.removeObserver(s.element); s.droppables.each(function(d){ Droppables.remove(d) }); s.draggables.invoke('destroy'); delete Sortable.sortables[s.element.id]; } }, create: function(element) { element = $(element); var options = Object.extend({ element:     element, tag:         'li', dropOnEmpty: false, tree:        false, treeTag:     'ul', overlap:     'vertical', constraint:  'vertical', containment: element, handle:      false, only:        false, delay:       0, hoverclass:  null, ghosting:    false, quiet:       false, scroll:      false, scrollSensitivity: 20, scrollSpeed: 15, format:      this.SERIALIZE_RULE, elements:    false, handles:     false, onChange:    Prototype.emptyFunction, onUpdate:    Prototype.emptyFunction }, arguments[1] || { }); this.destroy(element); var options_for_draggable = { revert:      true, quiet:       options.quiet, scroll:      options.scroll, scrollSpeed: options.scrollSpeed, scrollSensitivity: options.scrollSensitivity, delay:       options.delay, ghosting:    options.ghosting, constraint:  options.constraint, handle:      options.handle }; if(options.starteffect) options_for_draggable.starteffect = options.starteffect; if(options.reverteffect) options_for_draggable.reverteffect = options.reverteffect; else if(options.ghosting) options_for_draggable.reverteffect = function(element) { element.style.top  = 0; element.style.left = 0; }; if(options.endeffect) options_for_draggable.endeffect = options.endeffect; if(options.zindex) options_for_draggable.zindex = options.zindex; var options_for_droppable = { overlap:     options.overlap, containment: options.containment, tree:        options.tree, hoverclass:  options.hoverclass, onHover:     Sortable.onHover }; var options_for_tree = { onHover:      Sortable.onEmptyHover, overlap:      options.overlap, containment:  options.containment, hoverclass:   options.hoverclass }; Element.cleanWhitespace(element); options.draggables = []; options.droppables = []; if(options.dropOnEmpty || options.tree) { Droppables.add(element, options_for_tree); options.droppables.push(element); }; (options.elements || this.findElements(element, options) || []).each( function(e,i) { var handle = options.handles ? $(options.handles[i]) : (options.handle ? $(e).select('.' + options.handle)[0] : e); options.draggables.push( new Draggable(e, Object.extend(options_for_draggable, { handle: handle }))); Droppables.add(e, options_for_droppable); if(options.tree) e.treeNode = element; options.droppables.push(e); }); if(options.tree) { (Sortable.findTreeElements(element, options) || []).each( function(e) { Droppables.add(e, options_for_tree); e.treeNode = element; options.droppables.push(e); }); }; this.sortables[element.id] = options; Draggables.addObserver(new SortableObserver(element, options.onUpdate)); }, findElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.tag); }, findTreeElements: function(element, options) { return Element.findChildren( element, options.only, options.tree ? true : false, options.treeTag); }, onHover: function(element, dropon, overlap) { if(Element.isParent(dropon, element)) return; if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) { return; } else if(overlap>0.5) { Sortable.mark(dropon, 'before'); if(dropon.previousSibling != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; dropon.parentNode.insertBefore(element, dropon); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } else { Sortable.mark(dropon, 'after'); var nextElement = dropon.nextSibling || null; if(nextElement != element) { var oldParentNode = element.parentNode; element.style.visibility = "hidden"; dropon.parentNode.insertBefore(element, nextElement); if(dropon.parentNode!=oldParentNode) Sortable.options(oldParentNode).onChange(element); Sortable.options(dropon.parentNode).onChange(element); } } }, onEmptyHover: function(element, dropon, overlap) { var oldParentNode = element.parentNode; var droponOptions = Sortable.options(dropon); if(!Element.isParent(dropon, element)) { var index; var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only}); var child = null; if(children) { var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); for (index = 0; index < children.length; index += 1) { if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) { offset -= Element.offsetSize (children[index], droponOptions.overlap); } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { child = index + 1 < children.length ? children[index + 1] : null; break; } else { child = children[index]; break; } } }; dropon.insertBefore(element, child); Sortable.options(oldParentNode).onChange(element); droponOptions.onChange(element); } }, unmark: function() { if(Sortable._marker) Sortable._marker.hide(); }, mark: function(dropon, position) { var sortable = Sortable.options(dropon.parentNode); if(sortable && !sortable.ghosting) return; if(!Sortable._marker) { Sortable._marker = ($('dropmarker') || Element.extend(document.createElement('DIV'))). hide().addClassName('dropmarker').setStyle({position:'absolute'}); document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); }; var offsets = Position.cumulativeOffset(dropon); Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); if(position=='after') if(sortable.overlap == 'horizontal') Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'}); else Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'}); Sortable._marker.show(); }, _tree: function(element, options, parent) { var children = Sortable.findElements(element, options) || []; for (var i = 0; i < children.length; ++i) { var match = children[i].id.match(options.format); if (!match) continue; var child = { id: encodeURIComponent(match ? match[1] : null), element: element, parent: parent, children: [], position: parent.children.length, container: $(children[i]).down(options.treeTag) }; if (child.container) this._tree(child.container, options, child); parent.children.push (child); }; return parent; }, tree: function(element) { element = $(element); var sortableOptions = this.options(element); var options = Object.extend({ tag: sortableOptions.tag, treeTag: sortableOptions.treeTag, only: sortableOptions.only, name: element.id, format: sortableOptions.format }, arguments[1] || { }); var root = { id: null, parent: null, children: [], container: element, position: 0 }; return Sortable._tree(element, options, root); }, _constructIndex: function(node) { var index = ''; do { if (node.id) index = '[' + node.position + ']' + index; } while ((node = node.parent) != null); return index; }, sequence: function(element) { element = $(element); var options = Object.extend(this.options(element), arguments[1] || { }); return $(this.findElements(element, options) || []).map( function(item) { return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; }); }, setSequence: function(element, new_sequence) { element = $(element); var options = Object.extend(this.options(element), arguments[2] || { }); var nodeMap = { }; this.findElements(element, options).each( function(n) { if (n.id.match(options.format)) nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode]; n.parentNode.removeChild(n); }); new_sequence.each(function(ident) { var n = nodeMap[ident]; if (n) { n[1].appendChild(n[0]); delete nodeMap[ident]; } }); }, serialize: function(element) { element = $(element); var options = Object.extend(Sortable.options(element), arguments[1] || { }); var name = encodeURIComponent( (arguments[1] && arguments[1].name) ? arguments[1].name : element.id); if (options.tree) { return Sortable.tree(element, arguments[1]).children.map( function (item) { return [name + Sortable._constructIndex(item) + "[id]=" + encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); }).flatten().join('&'); } else { return Sortable.sequence(element, arguments[1]).map( function(item) { return name + "[]=" + encodeURIComponent(item); }).join('&'); } } }; Element.isParent = function(child, element) { if (!child.parentNode || child == element) return false; if (child.parentNode == element) return true; return Element.isParent(child.parentNode, element); }; Element.findChildren = function(element, only, recursive, tagName) { if(!element.hasChildNodes()) return null; tagName = tagName.toUpperCase(); if(only) only = [only].flatten(); var elements = []; $A(element.childNodes).each( function(e) { if(e.tagName && e.tagName.toUpperCase()==tagName && (!only || (Element.classNames(e).detect(function(v) { return only.include(v) })))) elements.push(e); if(recursive) { var grandchildren = Element.findChildren(e, only, recursive, tagName); if(grandchildren) elements.push(grandchildren); } }); return (elements.length>0 ? elements.flatten() : []); }; Element.offsetSize = function (element, type) { return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')]; }; var fileLoadingImage = im+"loading.gif"; var fileBottomNavCloseImage = im+"lightbox/close.gif"; var resizeSpeed = 7; var borderSize = 10; var imageArray = new Array; var activeImage; if(resizeSpeed > 10){ resizeSpeed = 10;}; if(resizeSpeed < 1){ resizeSpeed = 1;}; resizeDuration = (11 - resizeSpeed) * 0.15; Object.extend(Element, { getWidth: function(element) { element = $(element); return element.offsetWidth; }, setWidth: function(element,w) { element = $(element); element.style.width = w +"px"; }, setHeight: function(element,h) { element = $(element); element.style.height = h +"px"; }, setTop: function(element,t) { element = $(element); element.style.top = t +"px"; }, setSrc: function(element,src) { element = $(element); element.src = src; }, setHref: function(element,href) { element = $(element); element.href = href; }, setInnerHTML: function(element,content) { element = $(element); element.innerHTML = content; } }); Array.prototype.removeDuplicates = function () { for(i = 1; i < this.length; i++){ if(this[i][0] == this[i-1][0]){ this.splice(i,1); } } }; Array.prototype.empty = function () { for(i = 0; i <= this.length; i++){ this.shift(); } }; var Lightbox = Class.create(); Lightbox.prototype = { initialize: function() { if (!document.getElementsByTagName){ return; }; var anchors = document.getElementsByTagName('a'); for (var i=0; i<anchors.length; i++){ var anchor = anchors[i]; var relAttribute = String(anchor.getAttribute('rel')); if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){ anchor.onclick = function () {myLightbox.start(this); return false;} } }; var objBody = document.getElementsByTagName("body").item(0); var objOverlay = document.createElement("div"); objOverlay.setAttribute('id','overlay'); objOverlay.style.display = 'none'; objOverlay.style.position = 'absolute'; objOverlay.style.top = '0'; objOverlay.style.left = '0'; objOverlay.style.zIndex = '90'; objOverlay.style.width = '100%'; objOverlay.style.height = '500px'; objOverlay.style.backgroundColor = 'black'; objOverlay.onclick = function() { myLightbox.end(); return false; }; objBody.appendChild(objOverlay); var objLightbox = document.createElement("div"); objLightbox.setAttribute('id','lightbox'); objLightbox.style.display = 'none'; objLightbox.style.position = 'absolute'; objLightbox.style.top = '40px'; objLightbox.style.width = '100%'; objLightbox.style.zIndex = '100'; objLightbox.style.textAlign = 'center'; objLightbox.style.lineHeight = '0'; objBody.appendChild(objLightbox); var objOuterImageContainer = document.createElement("div"); objOuterImageContainer.setAttribute('id','outerImageContainer'); objOuterImageContainer.style.position = 'relative'; objOuterImageContainer.style.backgroundColor = 'white'; objOuterImageContainer.style.width = '250px'; objOuterImageContainer.style.height = '250px'; objOuterImageContainer.style.margin = '0 auto'; objLightbox.appendChild(objOuterImageContainer); var objImageContainer = document.createElement("div"); objImageContainer.setAttribute('id','imageContainer'); objImageContainer.style.padding = '10px'; objOuterImageContainer.appendChild(objImageContainer); var objLightboxImage = document.createElement("img"); objLightboxImage.setAttribute('id','lightboxImage'); objImageContainer.appendChild(objLightboxImage); var objHoverNav = document.createElement("div"); objHoverNav.setAttribute('id','hoverNav'); objHoverNav.style.position = 'absolute'; objHoverNav.style.top = '0'; objHoverNav.style.left = '0'; objHoverNav.style.height = '100%'; objHoverNav.style.width = '100%'; objHoverNav.style.zIndex = '10'; objImageContainer.appendChild(objHoverNav); var objPrevLink = document.createElement("a"); objPrevLink.setAttribute('id','prevLink'); objPrevLink.setAttribute('href','#'); objHoverNav.appendChild(objPrevLink); var objNextLink = document.createElement("a"); objNextLink.setAttribute('id','nextLink'); objNextLink.setAttribute('href','#'); objHoverNav.appendChild(objNextLink); var objLoading = document.createElement("div"); objLoading.setAttribute('id','loading'); objLoading.style.position = 'absolute'; objLoading.style.top = '40%'; objLoading.style.left = '0%'; objLoading.style.height = '25%'; objLoading.style.width = '100%'; objLoading.style.textAlign = 'center'; objLoading.style.lineHeight = '0'; objImageContainer.appendChild(objLoading); var objLoadingLink = document.createElement("a"); objLoadingLink.setAttribute('id','loadingLink'); objLoadingLink.setAttribute('href','#'); objLoadingLink.onclick = function() { myLightbox.end(); return false; }; objLoading.appendChild(objLoadingLink); var objLoadingImage = document.createElement("img"); objLoadingImage.setAttribute('src', fileLoadingImage); objLoadingLink.appendChild(objLoadingImage); var objImageDataContainer = document.createElement("div"); objImageDataContainer.setAttribute('id','imageDataContainer'); objImageDataContainer.style.font = '10px Verdana'; objImageDataContainer.style.backgroundColor = 'white'; objImageDataContainer.style.margin = '0 auto'; objImageDataContainer.style.lineHeight = '1.4em'; objImageDataContainer.className = 'clearfix'; objLightbox.appendChild(objImageDataContainer); var objImageData = document.createElement("div"); objImageData.setAttribute('id','imageData'); objImageData.style.padding = '0 10px'; objImageDataContainer.appendChild(objImageData); var objImageDetails = document.createElement("div"); objImageDetails.setAttribute('id','imageDetails'); objImageDetails.style.width = '80%'; if(isie) objImageDetails.style.styleFloat = 'left'; else objImageDetails.style.cssFloat = 'left'; objImageDetails.style.textAlign = 'left'; objImageData.appendChild(objImageDetails); var objCaption = document.createElement("span"); objCaption.setAttribute('id','caption'); objCaption.style.fontWeight = 'bold'; objImageDetails.appendChild(objCaption); var objNumberDisplay = document.createElement("span"); objNumberDisplay.setAttribute('id','numberDisplay'); objNumberDisplay.style.display = 'block'; objNumberDisplay.style.clear = 'left'; objNumberDisplay.style.paddingBottom = '1.0em'; objImageDetails.appendChild(objNumberDisplay); var objBottomNav = document.createElement("div"); objBottomNav.setAttribute('id','bottomNav'); if(isie) objBottomNav.style.styleFloat = 'right'; else objBottomNav.style.cssFloat = 'right'; objBottomNav.style.paddingBottom = '0.7em'; objImageData.appendChild(objBottomNav); var objBottomNavCloseLink = document.createElement("a"); objBottomNavCloseLink.setAttribute('id','bottomNavClose'); objBottomNavCloseLink.setAttribute('href','#'); objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }; objBottomNav.appendChild(objBottomNavCloseLink); var objBottomNavCloseImage = document.createElement("img"); objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage); objBottomNavCloseLink.appendChild(objBottomNavCloseImage); }, start: function(imageLink) { hideSelectBoxes(); var arrayPageSize = getPageSize(); Element.setHeight('overlay', arrayPageSize[1]); new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 }); imageArray = []; imageNum = 0; if (!document.getElementsByTagName){ return; }; var anchors = document.getElementsByTagName('a'); if((imageLink.getAttribute('rel') == 'lightbox')){ imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'))); } else { for (var i=0; i<anchors.length; i++){ var anchor = anchors[i]; if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){ imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'))); } }; imageArray.removeDuplicates(); while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;} }; var arrayPageSize = getPageSize(); var arrayPageScroll = getPageScroll(); var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15); Element.setTop('lightbox', lightboxTop); Element.show('lightbox'); this.changeImage(imageNum); }, changeImage: function(imageNum) { activeImage = imageNum; Element.show('loading'); Element.hide('lightboxImage'); Element.hide('hoverNav'); Element.hide('prevLink'); Element.hide('nextLink'); Element.hide('imageDataContainer'); Element.hide('numberDisplay'); imgPreloader = new Image(); imgPreloader.onload=function(){ Element.setSrc('lightboxImage', imageArray[activeImage][0]); myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height); }; imgPreloader.src = imageArray[activeImage][0]; }, resizeImageContainer: function( imgWidth, imgHeight) { this.wCur = Element.getWidth('outerImageContainer'); this.hCur = Element.getHeight('outerImageContainer'); this.xScale = ((imgWidth  + (borderSize * 2)) / this.wCur) * 100; this.yScale = ((imgHeight  + (borderSize * 2)) / this.hCur) * 100; wDiff = (this.wCur - borderSize * 2) - imgWidth; hDiff = (this.hCur - borderSize * 2) - imgHeight; if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }; if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }; if((hDiff == 0) && (wDiff == 0)){ if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} }; Element.setHeight('prevLink', imgHeight); Element.setHeight('nextLink', imgHeight); Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2)); this.showImage(); }, showImage: function(){ Element.hide('loading'); new Effect.Appear('lightboxImage', { duration: 0.5, queue: 'end', afterFinish: function(){	myLightbox.updateDetails(); } }); this.preloadNeighborImages(); }, updateDetails: function() { Element.show('caption'); Element.setInnerHTML( 'caption', imageArray[activeImage][1]+'<br>'); if(imageArray.length > 1){ Element.show('numberDisplay'); Element.setInnerHTML( 'numberDisplay', lightboximage+" " + eval(activeImage + 1) + " "+lightboxof+" " + imageArray.length); }; new Effect.Parallel( [ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration + 0.25, from: 0.0, to: 1.0 }), new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 }) ], { duration: 0.65, afterFinish: function() { myLightbox.updateNav();} } ); }, updateNav: function() { Element.show('hoverNav'); if(activeImage != 0){ Element.show('prevLink'); document.getElementById('prevLink').onclick = function() { myLightbox.changeImage(activeImage - 1); blur(); return false; } }; if(activeImage != (imageArray.length - 1)){ Element.show('nextLink'); document.getElementById('nextLink').onclick = function() { myLightbox.changeImage(activeImage + 1); blur(); return false; } }; this.enableKeyboardNav(); }, enableKeyboardNav: function() { document.onkeydown = this.keyboardAction; }, disableKeyboardNav: function() { document.onkeydown = ''; }, keyboardAction: function(e) { if (e == null) { keycode = event.keyCode; } else { keycode = e.which; }; key = String.fromCharCode(keycode).toLowerCase(); if((key == 'x') || (key == 'o') || (key == 'c')){ myLightbox.end(); } else if(key == 'p'){ if(activeImage != 0){ myLightbox.disableKeyboardNav(); myLightbox.changeImage(activeImage - 1); } } else if(key == 'n'){ if(activeImage != (imageArray.length - 1)){ myLightbox.disableKeyboardNav(); myLightbox.changeImage(activeImage + 1); } }; }, preloadNeighborImages: function(){ if((imageArray.length - 1) > activeImage){ preloadNextImage = new Image(); preloadNextImage.src = imageArray[activeImage + 1][0]; }; if(activeImage > 0){ preloadPrevImage = new Image(); preloadPrevImage.src = imageArray[activeImage - 1][0]; }; }, end: function() { this.disableKeyboardNav(); Element.hide('lightbox'); new Effect.Fade('overlay', { duration: 0.2}); showSelectBoxes(); } }; function getPageScroll(){ var yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop){ yScroll = document.documentElement.scrollTop; } else if (document.body) { yScroll = document.body.scrollTop; }; arrayPageScroll = new Array('',yScroll); return arrayPageScroll; }; function getPageSize(){ var xScroll, yScroll; if (window.innerHeight && window.scrollMaxY) { xScroll = document.body.scrollWidth; yScroll = window.innerHeight + window.scrollMaxY; } else if (document.body.scrollHeight > document.body.offsetHeight){ xScroll = document.body.scrollWidth; yScroll = document.body.scrollHeight; } else { xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; }; var windowWidth, windowHeight; if (self.innerHeight) { windowWidth = self.innerWidth; windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { windowWidth = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight; } else if (document.body) { windowWidth = document.body.clientWidth; windowHeight = document.body.clientHeight; }; if(yScroll < windowHeight){ pageHeight = windowHeight; } else { pageHeight = yScroll; }; if(xScroll < windowWidth){ pageWidth = windowWidth; } else { pageWidth = xScroll; }; arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight); return arrayPageSize; }; function getKey(e){ if (e == null) { keycode = event.keyCode; } else { keycode = e.which; }; key = String.fromCharCode(keycode).toLowerCase(); if(key == 'x'){ } }; function listenKey () {	document.onkeypress = getKey; }; function showSelectBoxes(){ selects = document.getElementsByTagName("select"); for (i = 0; i != selects.length; i++) { selects[i].style.visibility = "visible"; } }; function hideSelectBoxes(){ selects = document.getElementsByTagName("select"); for (i = 0; i != selects.length; i++) { selects[i].style.visibility = "hidden"; } }; function pause(numberMillis) { var now = new Date(); var exitTime = now.getTime() + numberMillis; while (true) { now = new Date(); if (now.getTime() > exitTime) return; } }; function initLightbox() { myLightbox = new Lightbox(); }; Event.observe(window, 'load', initLightbox, false); if (!Control) var Control = { }; Control.Slider = Class.create({ initialize: function(handle, track, options) { var slider = this; if (Object.isArray(handle)) { this.handles = handle.collect( function(e) { return $(e) }); } else { this.handles = [$(handle)]; }; this.track   = $(track); this.options = options || { }; this.axis      = this.options.axis || 'horizontal'; this.increment = this.options.increment || 1; this.step      = parseInt(this.options.step || '1'); this.range     = this.options.range || $R(0,1); this.value     = 0; this.values    = this.handles.map( function() { return 0 }); this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false; this.options.startSpan = $(this.options.startSpan || null); this.options.endSpan   = $(this.options.endSpan || null); this.restricted = this.options.restricted || false; this.maximum   = this.options.maximum || this.range.end; this.minimum   = this.options.minimum || this.range.start; this.alignX = parseInt(this.options.alignX || '0'); this.alignY = parseInt(this.options.alignY || '0'); this.trackLength = this.maximumOffset() - this.minimumOffset(); this.handleLength = this.isVertical() ? (this.handles[0].offsetHeight != 0 ? this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : this.handles[0].style.width.replace(/px$/,"")); this.active   = false; this.dragging = false; this.disabled = false; if (this.options.disabled) this.setDisabled(); this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false; if (this.allowedValues) { this.minimum = this.allowedValues.min(); this.maximum = this.allowedValues.max(); }; this.eventMouseDown = this.startDrag.bindAsEventListener(this); this.eventMouseUp   = this.endDrag.bindAsEventListener(this); this.eventMouseMove = this.update.bindAsEventListener(this); this.handles.each( function(h,i) { i = slider.handles.length-1-i; slider.setValue(parseFloat( (Object.isArray(slider.options.sliderValue) ? slider.options.sliderValue[i] : slider.options.sliderValue) || slider.range.start), i); h.makePositioned().observe("mousedown", slider.eventMouseDown); }); this.track.observe("mousedown", this.eventMouseDown); document.observe("mouseup", this.eventMouseUp); document.observe("mousemove", this.eventMouseMove); this.initialized = true; }, dispose: function() { var slider = this; Event.stopObserving(this.track, "mousedown", this.eventMouseDown); Event.stopObserving(document, "mouseup", this.eventMouseUp); Event.stopObserving(document, "mousemove", this.eventMouseMove); this.handles.each( function(h) { Event.stopObserving(h, "mousedown", slider.eventMouseDown); }); }, setDisabled: function(){ this.disabled = true; }, setEnabled: function(){ this.disabled = false; }, getNearestValue: function(value){ if (this.allowedValues){ if (value >= this.allowedValues.max()) return(this.allowedValues.max()); if (value <= this.allowedValues.min()) return(this.allowedValues.min()); var offset = Math.abs(this.allowedValues[0] - value); var newValue = this.allowedValues[0]; this.allowedValues.each( function(v) { var currentOffset = Math.abs(v - value); if (currentOffset <= offset){ newValue = v; offset = currentOffset; } }); return newValue; }; if (value > this.range.end) return this.range.end; if (value < this.range.start) return this.range.start; return value; }, setValue: function(sliderValue, handleIdx){ if (!this.active) { this.activeHandleIdx = handleIdx || 0; this.activeHandle    = this.handles[this.activeHandleIdx]; this.updateStyles(); }; handleIdx = handleIdx || this.activeHandleIdx || 0; if (this.initialized && this.restricted) { if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1])) sliderValue = this.values[handleIdx-1]; if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1])) sliderValue = this.values[handleIdx+1]; }; sliderValue = this.getNearestValue(sliderValue); this.values[handleIdx] = sliderValue; this.value = this.values[0]; this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = this.translateToPx(sliderValue); this.drawSpans(); if (!this.dragging || !this.event) this.updateFinished(); }, setValueBy: function(delta, handleIdx) { this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, handleIdx || this.activeHandleIdx || 0); }, translateToPx: function(value) { return Math.round( ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * (value - this.range.start)) + "px"; }, translateToValue: function(offset) { return ((offset/(this.trackLength-this.handleLength) * (this.range.end-this.range.start)) + this.range.start); }, getRange: function(range) { var v = this.values.sortBy(Prototype.K); range = range || 0; return $R(v[range],v[range+1]); }, minimumOffset: function(){ return(this.isVertical() ? this.alignY : this.alignX); }, maximumOffset: function(){ return(this.isVertical() ? (this.track.offsetHeight != 0 ? this.track.offsetHeight : this.track.style.height.replace(/px$/,"")) - this.alignY : (this.track.offsetWidth != 0 ? this.track.offsetWidth : this.track.style.width.replace(/px$/,"")) - this.alignX); }, isVertical:  function(){ return (this.axis == 'vertical'); }, drawSpans: function() { var slider = this; if (this.spans) $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) }); if (this.options.startSpan) this.setSpan(this.options.startSpan, $R(0, this.values.length>1 ? this.getRange(0).min() : this.value )); if (this.options.endSpan) this.setSpan(this.options.endSpan, $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum)); }, setSpan: function(span, range) { if (this.isVertical()) { span.style.top = this.translateToPx(range.start); span.style.height = this.translateToPx(range.end - range.start + this.range.start); } else { span.style.left = this.translateToPx(range.start); span.style.width = this.translateToPx(range.end - range.start + this.range.start); } }, updateStyles: function() { this.handles.each( function(h){ Element.removeClassName(h, 'selected') }); Element.addClassName(this.activeHandle, 'selected'); }, startDrag: function(event) { if (Event.isLeftClick(event)) { if (!this.disabled){ this.active = true; var handle = Event.element(event); var pointer  = [Event.pointerX(event), Event.pointerY(event)]; var track = handle; if (track==this.track) { var offsets  = Position.cumulativeOffset(this.track); this.event = event; this.setValue(this.translateToValue( (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2) )); var offsets  = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } else { while((this.handles.indexOf(handle) == -1) && handle.parentNode); handle = handle.parentNode; if (this.handles.indexOf(handle)!=-1) { this.activeHandle    = handle; this.activeHandleIdx = this.handles.indexOf(this.activeHandle); this.updateStyles(); var offsets  = Position.cumulativeOffset(this.activeHandle); this.offsetX = (pointer[0] - offsets[0]); this.offsetY = (pointer[1] - offsets[1]); } } }; Event.stop(event); } }, update: function(event) { if (this.active) { if (!this.dragging) this.dragging = true; this.draw(event); if (Prototype.Browser.WebKit) window.scrollBy(0,0); Event.stop(event); } }, draw: function(event) { var pointer = [Event.pointerX(event), Event.pointerY(event)]; var offsets = Position.cumulativeOffset(this.track); pointer[0] -= this.offsetX + offsets[0]; pointer[1] -= this.offsetY + offsets[1]; this.event = event; this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] )); if (this.initialized && this.options.onSlide) this.options.onSlide(this.values.length>1 ? this.values : this.value, this); }, endDrag: function(event) { if (this.active && this.dragging) { this.finishDrag(event, true); Event.stop(event); }; this.active = false; this.dragging = false; }, finishDrag: function(event, success) { this.active = false; this.dragging = false; this.updateFinished(); }, updateFinished: function() { if (this.initialized && this.options.onChange) this.options.onChange(this.values.length>1 ? this.values : this.value, this); this.event = null; } });
// ]]>
