/*	Product popup addon
 *
 *	@copyright IDEV.no and Silverthemes.com
 *	@author Jone Eide <jone@idev.no>
 **/
function PopupOverlay(options)
{this.url=options.url;this.create_overlay=options.create_overlay;this.createPopup();this.createImagePopup();this.product_id=false;if(typeof options.imagesearch=='undefined'){this.imagesearch='div.catalog-listing img';}
else{this.imagesearch=options.imagesearch;}
if(typeof options.parentsearch=='undefined'){this.parentsearch='li.item';}
else{this.parentsearch=options.parentsearch;}
if(typeof options.serial=='undefined'){this.code='none';}
else{this.code=options.serial;}
if(this.create_overlay){this.createOverlay();}
$$(this.imagesearch).invoke('observe','mouseover',PopupOverlay.getImageMouseOverFunction(this));$$(this.imagesearch).invoke('observe','mouseout',PopupOverlay.getImageMouseOutFunction(this));}
PopupOverlay.prototype.createImagePopup=function()
{this.imagepopup=document.createElement('div');this.imagepopup.id='product-image-popup';Element.extend(this.imagepopup);this.imagepopup.setStyle({display:'none'});this.imagepopup.addClassName('product-image-popup-normal');this.imagepopup.update('View more');this.imagepopup.observe('mouseover',PopupOverlay.getImagePopupMouseOverFunction(this));this.imagepopup.observe('mouseout',PopupOverlay.getImagePopupMouseOutFunction(this));this.imagepopup.observe('click',PopupOverlay.getImagePopupClickFunction(this));document.body.insertBefore(this.imagepopup,document.body.childNodes[0]);};PopupOverlay.getImagePopupClickFunction=function(popup_overlay)
{return function(event){var element=event.element();popup_overlay.getProductData(popup_overlay.product_id);popup_overlay.show();};};PopupOverlay.getImagePopupMouseOutFunction=function(popup_overlay)
{return function(event){popup_overlay.imagepopup.removeClassName('product-image-popup-hover');popup_overlay.imagepopup.addClassName('product-image-popup-normal');popup_overlay.imagepopup.hide();};};PopupOverlay.getImagePopupMouseOverFunction=function(popup_overlay)
{return function(event){popup_overlay.imagepopup.removeClassName('product-image-popup-normal');popup_overlay.imagepopup.addClassName('product-image-popup-hover');popup_overlay.imagepopup.show();};};PopupOverlay.getImageMouseOutFunction=function(popup_overlay)
{return function(event){var element=event.element();event.preventDefault();popup_overlay.imagepopup.hide();};};PopupOverlay.getImageMouseOverFunction=function(popup_overlay)
{return function(event){event.preventDefault();var element=event.element();var dimensions=element.getDimensions();var offset=element.cumulativeOffset();var image_height=dimensions.height;var image_width=dimensions.width;var imagepopup_dimensions=popup_overlay.imagepopup.getDimensions();var offset_left=offset[0]+((image_width/2)-(imagepopup_dimensions.width/2));var offset_top=offset[1]+image_height-imagepopup_dimensions.height;popup_overlay.imagepopup.setStyle({top:offset_top+'px',left:offset_left+'px'});popup_overlay.imagepopup.show();var parent=element.up(popup_overlay.parentsearch);popup_overlay.product_id=parent.id.split('-')[1];var linkparent=element.up('a');popup_overlay.product_url=linkparent.href;};};PopupOverlay.prototype.setLoading=function()
{var html='<div class="productpopup-loading">Loading...</div>';this.contents.update(html);this.centerPopup();};PopupOverlay.prototype.getProductData=function(product_id)
{var url=this.url+'?product_id='+product_id;var popup_overlay=this;this.setLoading();var request=new Ajax.Request(url,{method:'get',onSuccess:function(transport){var data=transport.responseText;if(!popup_overlay.check()){data=data+Base64.decode('PHA+UGxlYXNlIHB1cmNoYXNlIGEgbGljZW5zZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LnNpbHZlcnRoZW1lcy5jb20iPnd3dy5TaWx2ZXJ0aGVtZXMuY29tPC9hPi48L3A+');}
popup_overlay.contents.update(data);popup_overlay.centerPopup();$('popup-product-button-close').observe('click',function(e){popup_overlay.hide();});$('popup-product-button-close').observe('mouseover',function(e){e.element().addClassName('popup-product-button-close-active');});$('popup-product-button-close').observe('mouseout',function(e){e.element().removeClassName('popup-product-button-close-active');});$('popup-product-button-product').observe('click',function(e){window.location=popup_overlay.product_url;});$('popup-product-button-product').observe('mouseover',function(e){e.element().addClassName('popup-product-button-active');});$('popup-product-button-product').observe('mouseout',function(e){e.element().removeClassName('popup-product-button-active');});},onFailure:function(){alert('AJAX request failed.');}});};PopupOverlay.getLinkClickFunction=function(popup_overlay)
{return function(event){var element=event.element();var product_id=element.id;event.preventDefault();popup_overlay.getProductData(product_id);popup_overlay.show();};};PopupOverlay.prototype.show=function()
{if(this.create_overlay){this.overlay.show();}
var effect=new Effect.Appear(this.popup,{duration:0.3});};PopupOverlay.prototype.hide=function()
{var overlay=this.overlay;var popup_overlay=this;var effect=new Effect.Fade(this.popup,{duration:0.2,afterFinish:function(){if(popup_overlay.create_overlay){var neweffect=new Effect.Fade(overlay,{duration:0.2});}}});};PopupOverlay.prototype.getPopup=function()
{if(typeof this.popup=='undefined'){return this.createPopup();}
else{return this.popup;}};PopupOverlay.getCloseLinkFunction=function(popup_overlay)
{return function(event){popup_overlay.hide();};};PopupOverlay.prototype.buildHeader=function()
{this.header=document.createElement('div');Element.extend(this.header);this.header.addClassName('productpopup-header');this.header.appendChild(document.createTextNode(''));this.closeicon=document.createElement('div');this.closeicon.appendChild(document.createTextNode(''));Element.extend(this.closeicon);this.closeicon.observe('click',PopupOverlay.getCloseLinkFunction(this));this.closeicon.addClassName('closeicon');this.header.appendChild(this.closeicon);this.popup.appendChild(this.header);};PopupOverlay.prototype.check=function()
{if(hex_sha1(hex_sha1(Base64.decode('cHJvZHVjdHBvcHVw'))+document.domain)==this.code){return true;}
return false;};PopupOverlay.prototype.buildContents=function()
{this.contents=document.createElement('div');Element.extend(this.contents);this.contents.appendChild(document.createTextNode(''));this.contents.addClassName('contents');this.popup.appendChild(this.contents);};PopupOverlay.prototype.buildFooter=function()
{this.footer=document.createElement('div');Element.extend(this.footer);this.footer.addClassName('productpopup-footer');this.footer.appendChild(document.createTextNode(''));this.popup.appendChild(this.footer);};PopupOverlay.prototype.centerPopup=function()
{var dimensions=document.viewport.getDimensions();var popup_width=this.popup.getWidth();var popup_height=this.popup.getHeight();var offset=document.viewport.getScrollOffsets();var width=dimensions.width;var left=(width/2)-(popup_width/2);var height=dimensions.height;var top=(height/2)-(popup_height/2)+offset.top;this.popup.setStyle({top:top+'px',left:left+'px'});};PopupOverlay.prototype.createPopup=function()
{this.popup=document.createElement('div');this.popup.id='popup';Element.extend(this.popup);this.buildHeader();this.buildContents();this.buildFooter();this.popup.setStyle({display:'none'});document.body.insertBefore(this.popup,document.body.childNodes[0]);return this.popup;};PopupOverlay.prototype.createOverlay=function(){this.overlay=document.createElement('div');this.overlay.id='popup-overlay';Element.extend(this.overlay);this.overlay.setStyle({height:document.body.offsetHeight+'px',display:'none'});var popupoverlay=this;this.overlay.observe('click',function(e){popupoverlay.hide();});document.body.insertBefore(this.overlay,document.body.childNodes[0]);};function hex_sha1(s){return rstr2hex(rstr_sha1(str2rstr_utf8(s)));}
function b64_sha1(s){return rstr2b64(rstr_sha1(str2rstr_utf8(s)));}
function any_sha1(s,e){return rstr2any(rstr_sha1(str2rstr_utf8(s)),e);}
function hex_hmac_sha1(k,d)
{return rstr2hex(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)));}
function b64_hmac_sha1(k,d)
{return rstr2b64(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)));}
function any_hmac_sha1(k,d,e)
{return rstr2any(rstr_hmac_sha1(str2rstr_utf8(k),str2rstr_utf8(d)),e);}
function sha1_vm_test()
{return hex_sha1("abc").toLowerCase()=="a9993e364706816aba3e25717850c26c9cd0d89d";}
function rstr_sha1(s)
{return binb2rstr(binb_sha1(rstr2binb(s),s.length*8));}
function rstr_hmac_sha1(key,data)
{var bkey=rstr2binb(key);if(bkey.length>16)bkey=binb_sha1(bkey,key.length*8);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
var hash=binb_sha1(ipad.concat(rstr2binb(data)),512+data.length*8);return binb2rstr(binb_sha1(opad.concat(hash),512+160));}
function rstr2hex(input)
{try{hexcase}catch(e){hexcase=0;}
var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var output="";var x;for(var i=0;i<input.length;i++)
{x=input.charCodeAt(i);output+=hex_tab.charAt((x>>>4)&0x0F)
+hex_tab.charAt(x&0x0F);}
return output;}
function rstr2b64(input)
{try{b64pad}catch(e){b64pad='';}
var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var output="";var len=input.length;for(var i=0;i<len;i+=3)
{var triplet=(input.charCodeAt(i)<<16)|(i+1<len?input.charCodeAt(i+1)<<8:0)|(i+2<len?input.charCodeAt(i+2):0);for(var j=0;j<4;j++)
{if(i*8+j*6>input.length*8)output+=b64pad;else output+=tab.charAt((triplet>>>6*(3-j))&0x3F);}}
return output;}
function rstr2any(input,encoding)
{var divisor=encoding.length;var remainders=Array();var i,q,x,quotient;var dividend=Array(Math.ceil(input.length/2));for(i=0;i<dividend.length;i++)
{dividend[i]=(input.charCodeAt(i*2)<<8)|input.charCodeAt(i*2+1);}
while(dividend.length>0)
{quotient=Array();x=0;for(i=0;i<dividend.length;i++)
{x=(x<<16)+dividend[i];q=Math.floor(x/divisor);x-=q*divisor;if(quotient.length>0||q>0)
quotient[quotient.length]=q;}
remainders[remainders.length]=x;dividend=quotient;}
var output="";for(i=remainders.length-1;i>=0;i--)
output+=encoding.charAt(remainders[i]);var full_length=Math.ceil(input.length*8/(Math.log(encoding.length)/Math.log(2)))
for(i=output.length;i<full_length;i++)
output=encoding[0]+output;return output;}
function str2rstr_utf8(input)
{var output="";var i=-1;var x,y;while(++i<input.length)
{x=input.charCodeAt(i);y=i+1<input.length?input.charCodeAt(i+1):0;if(0xD800<=x&&x<=0xDBFF&&0xDC00<=y&&y<=0xDFFF)
{x=0x10000+((x&0x03FF)<<10)+(y&0x03FF);i++;}
if(x<=0x7F)
output+=String.fromCharCode(x);else if(x<=0x7FF)
output+=String.fromCharCode(0xC0|((x>>>6)&0x1F),0x80|(x&0x3F));else if(x<=0xFFFF)
output+=String.fromCharCode(0xE0|((x>>>12)&0x0F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));else if(x<=0x1FFFFF)
output+=String.fromCharCode(0xF0|((x>>>18)&0x07),0x80|((x>>>12)&0x3F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));}
return output;}
function str2rstr_utf16le(input)
{var output="";for(var i=0;i<input.length;i++)
output+=String.fromCharCode(input.charCodeAt(i)&0xFF,(input.charCodeAt(i)>>>8)&0xFF);return output;}
function str2rstr_utf16be(input)
{var output="";for(var i=0;i<input.length;i++)
output+=String.fromCharCode((input.charCodeAt(i)>>>8)&0xFF,input.charCodeAt(i)&0xFF);return output;}
function rstr2binb(input)
{var output=Array(input.length>>2);for(var i=0;i<output.length;i++)
output[i]=0;for(var i=0;i<input.length*8;i+=8)
output[i>>5]|=(input.charCodeAt(i/8)&0xFF)<<(24-i%32);return output;}
function binb2rstr(input)
{var output="";for(var i=0;i<input.length*32;i+=8)
output+=String.fromCharCode((input[i>>5]>>>(24-i%32))&0xFF);return output;}
function binb_sha1(x,len)
{x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;var olde=e;for(var j=0;j<80;j++)
{if(j<16)w[j]=x[i+j];else w[j]=bit_rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=safe_add(safe_add(bit_rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j)));e=d;d=c;c=bit_rol(b,30);b=a;a=t;}
a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);e=safe_add(e,olde);}
return Array(a,b,c,d,e);}
function sha1_ft(t,b,c,d)
{if(t<20)return(b&c)|((~b)&d);if(t<40)return b^c^d;if(t<60)return(b&c)|(b&d)|(c&d);return b^c^d;}
function sha1_kt(t)
{return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;}
function safe_add(x,y)
{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}
function bit_rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));}
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
if(enc4!=64){output=output+String.fromCharCode(chr3);}}
output=Base64._utf8_decode(output);return output;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
return string;}}