/**
 * main ui control file
 * 
 */
 
// Femtoverlay: a barebones lightbox-like implementation with self-contained CSS
var Femtoverlay=new Class({Implements:[Events,Options],options:{onOpen:$empty,onClose:$empty,onCreate:$empty,onDestroy:$empty,size:{x:600,y:400},element:null,zIndex:60000,overlayDisplay:null},initialize:function(a){this.setOptions(a);if(this.options.element){$$(this.options.element).addEvent("click",function(b){b.stop();this.open()}.bind(this))}},reposition:function(b,a){b=b||{};if(b.x){this.options.size.x=b.x}if(b.y){this.options.size.y=b.y}if(this.femtocontent){this.femtocontent[a?"morph":"setStyles"]({width:this.options.size.x,height:this.options.size.y,marginLeft:-(this.options.size.x)/2,marginTop:document.getScroll().y + ((this.options.size.y>document.getSize().y)?(-document.getSize().y/2):(-this.options.size.y/2))})}this.overlay.setStyle("height",document.getScrollSize().y)},open:function(){if($("femtoverlay")){return}var a=this,b=this.options;this.overlay=new Element("div",{id:"femtoverlay",events:{click:this.close.bind(this)},tween:{duration:this.options.overlayDisplay?1:500,onComplete:function(){if(a.overlay.get("opacity")===0){a.fireEvent("close");a.overlay.dispose()}else{a.femtocontent=new Element("div",{id:"femtocontent",styles:{position:"absolute",top:"50%",left:"50%",overflow:"hidden",zIndex:b.zIndex+2}}).inject(document.body);a.reposition();a.isOpen=true;a.fireEvent("open",a.femtocontent)}}},styles:{position:"absolute",left:0,top:0,width:"100%",backgroundColor:"#000",opacity:0,zIndex:b.zIndex,display:a.options.overlayDisplay}}).inject(document.body).fade(0.8);this.reposition();this.key_close_fn=function(c){if(c.key=="esc"){c.stopPropagation();a.close()}};window.addEvent("resize",this.reposition.bind(this));document.addEvent("keydown",this.key_close_fn);this.fireEvent("create",a.femtocontent)},close:function(){if(this.femtocontent){this.femtocontent.dispose()}this.isOpen=false;window.removeEvent("resize",this.reposition);document.removeEvent("keydown",this.key_close_fn);this.fireEvent("destroy");this.overlay.fade("out")}});

var RPF = {
  activate_autoclear_fields: function(target) {
    target = target || document.getElements('input.autoclear');
    
    target.each(function(field) {
      field.store('type', field.get('type')).retrieve('reset', function(){ 
        field.set({
          'value': document.getElement('label[for=' + field.get('id') + ']').get('text'),
          'type': 'text',
          'events': {
            'focus': function() { this.set('value', '').removeClass('empty').removeEvent('focus', arguments.callee); },
            'keydown': function() { this.removeClass('empty').removeClass('error'); this.set('type', this.retrieve('type')) },
            'blur': function() { if (!/\w+/.test(this.get('value'))) this.retrieve('reset')(); }
          }
        }).addClass('empty');
      })();
    });
  },
  
  center_projects: function() {
    var ie = Boolean(Browser.Engine.trident4 || Browser.Engine.trident5);
    
    if ($('projects')) {
      $('projects').setStyle('margin-left', -41);
      if (ie) $('projects').setStyle('width', parseInt($('header').getStyle('width').match(/(\d+)/)[1], 10) + 41);
      $('projects').setStyle('margin-left', (function(parent) {
        var max_x = 0;
        
        parent.getElements('li').each(function(li) {
          var nx = li.getPosition(parent).x - 41 + li.getSize().x;
          max_x = nx > max_x ? nx : max_x;
        });
        if (ie) {
          $('projects').setStyles({
            'zoom': '1',
            'width': null
          });
        }
        
        var hs = $('header').getStyle('width').match(/(\d+)/)[1];
        return Math.floor((hs - max_x) / 2) - 41
      })($('projects')));
    }
  },
  
  hook_newsletter: function() {
    var img = new Image(); img.src = "images/n_throbber.gif";
    
    var fc = document.getElement('#newsletter');
    fc.set('tween', {
      onComplete: function() {
        if (fc.get('opacity') == 0) { fc.set('html', fc.retrieve('msg')).fade('in'); }
      }
    });
    
    $('subscribe').set('send', {
      onFailure: function(req) {
        $(document.body).setStyle('cursor', null);
        fc.removeClass('loading');
        $('subscribe').getElement('#sendbutton').set('disabled', null);
        (new Element('div', {
          id: 'n_error_msg',
          html: req.responseText,
          tween: { onComplete: function(el) { if (el.get('opacity') == 0) el.dispose(); }},
          styles: {
            position: 'absolute',
            left: fc.getElement('input').getPosition().x,
            top: 30,
            opacity: 0
          }
        })).inject(document.body).fade('in').fade.delay(3200, $('n_error_msg'), 'out');
      },
      onRequest: function() {
        if ($('n_error_msg')) $('n_error_msg').dispose();
      },
      onSuccess: function(responseText) {
        fc.store('msg', responseText);
        fc.removeClass('loading').fade('out');
        $(document.body).setStyle('cursor', null);
      }
    }).addEvent('submit', function(e) {
      e.stop();
      fc.addClass('loading');
      $(e.target).getElement('#sendbutton').set('disabled', 'disabled');
      $(document.body).setStyle('cursor', 'wait');
      e.target.send();
    }).getElement('#sendbutton').set('disabled', null);
  },
  
  hook_contact: function() {
    var overlay = new Femtoverlay({
      element: document.getElements('.contact_link'),
      size: {x: 600, y: 400 },
      onOpen: function(container) {
        container.set('html',
          '<form method="post" action="contact.php" id="frm_contact">' +
          '  <div id="contact_form">' +
          '    <h2 id="tit_contact"><span>Let us Know!</span></h2>' +
          '    <label for="rq_name_str"><strong>*</strong>Name</label>' +
          '    <input type="text" name="name" id="rq_name_str" class="text" />' +
          '    <br />' +
          '    <label for="rq_mail_mail"><strong>*</strong>E-mail</label>' +
          '    <input type="text" name="email" id="rq_mail_mail" class="text" />' +
          '    <br />' +
          '    <label for="subject_str">Subject</label>' +
          '    <input type="text" name="subject" id="subject_str" class="text" />' +
          '    <br />' +
          '    <label for="rq_message_txt"><strong>*</strong>Message</label>' +
          '    <textarea name="message" id="rq_message_txt" class="text" cols="72" rows="5"></textarea>' +
          '    <br />' +
          '    <p class="submit"><button type="submit">Submit</button></p>' +
          '  </div>' +
          '  <div id="over_head"></div>' +
          '  <div id="over_foot"></div>' +
          '  <span id="close_btn"></span>' +
          '</form>'
        );
        overlay.reposition({y: $('contact_form').getSize().y + 24});
        container.setStyle('overflow', 'visible');
        $('close_btn').addEvent('click', function() { overlay.close() });
        var fc = document.id('contact_form');
        $('frm_contact').set('send', {
          onFailure: function(req) {
            $(document.body).setStyle('cursor', null);
            fc.removeClass('loading');
            $('frm_contact').getElement('button').set('disabled', null);
            switch (req.status) {
              case 409:
              case 500:
                (new Element('div', {
                  id: 'c_error_msg',
                  text: req.responseText,
                  tween: {
                    onComplete: function(el) { if (el.get('opacity') == 0) el.dispose(); }
                  },
                  styles: {
                    position: 'absolute',
                    left: $('frm_contact').getElement('button').getPosition(fc).x + $('frm_contact').getElement('button').getSize().x + 10,
                    top: $('frm_contact').getElement('button').getPosition(fc).y + 5,
                    color: '#f11'
                  }
                })).inject(fc).fade.delay(1500, $('c_error_msg'), 'out');
                break;
            }
          },
          onRequest: function() {
            if ($('c_error_msg')) $('c_error_msg').dispose();
          },
          onSuccess: function(responseText) {
            fc.store('msg', responseText).removeClass('loading');
            (new Element('div', {
              id: 'c_success_msg',
              text: responseText,
              tween: {
                onComplete: function(el) { if (el.get('opacity') == 0) overlay.close(); }
              },
              styles: {
                position: 'absolute',
                left: $('frm_contact').getElement('button').getPosition(fc).x + $('frm_contact').getElement('button').getSize().x + 10,
                top: $('frm_contact').getElement('button').getPosition(fc).y + 5,
                color: '#1f1'
              }
            })).inject(fc).fade.delay(1750, $('c_success_msg'), 'out');
            $(document.body).setStyle('cursor', null);
          }
        }).addEvent('submit', function(e) {
          e.stop();
          
          if (!RPF.Validator.validate($('frm_contact'), {show_error: false, paint_field: true })) return;
          
          fc.addClass('loading');
          $(e.target).getElement('button').set('disabled', 'disabled');
          $(document.body).setStyle('cursor', 'wait');
          e.target.send();
        }).getElement('button').set('disabled', null);
      },
      onCreate: function() { window.retrieve('slider').pause(); },
      onDestroy: function() { window.retrieve('slider').resume(); }
    });
    
    window.addEvent('scroll', function(){if (overlay.overlay) overlay.reposition();});
  },
  
  adjust_footer: function() {
    $('footer').setStyle('top', null);
    if ($('footer').getCoordinates().bottom < document.getSize().y) {
      $('footer').set({
        styles: {
          position: 'relative',
          top: (document.getSize().y - $('footer').getCoordinates().bottom - 1)
        }
      });
    }
  },
  hook_videolinks: function() {
    var yt_template = 'http://www.youtube.com/v/{video_id}&hl=en_US&fs=1&';
    var vm_template = 'http://vimeo.com/moogaloop.swf?clip_id={video_id}&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=59a5d1&amp;fullscreen=1';
    
    document.getElements('#projects p.client a').each(function(a) {
      var site = a.get('href').match(/(youtube|vimeo)/)[1];
      var v_id = a.get('href').match(/(\w+)$/)[1];
      var width, height, embed_code;
      
      switch (site) {
        case "youtube":
          width = 425;
          height = 344;
          embed_code = yt_template.substitute({video_id: v_id});
          break;
        case "vimeo":
          width = 600;
          height = 330;
          embed_code = vm_template.substitute({video_id: v_id});
          break;
      }
      
      var overlay = new Femtoverlay({
        element: a,
        size: {x: width, y: height },
        onOpen: function(container) {
          if (site == 'youtube') container.addClass('loading');
          new Swiff(embed_code, {
            container: container,
            width: width,
            height: height,
            params: {
              allowFullScreen: true,
              allowScriptAccess: 'always'
            }
          });
          new Element('span', {id: 'close_btn', events: {'click': function(){ overlay.close();}}}).inject(container.setStyle('overflow', 'visible'));
        },
        onCreate: function() { window.retrieve('slider').pause(); },
        onDestroy: function() { window.retrieve('slider').resume(); }
      });
    });
  }
}

RPF.Validator={validations:[],field_regexp:/rq_([^_]+(_[^_]+)?)_([a-z]+)/,default_options:{jump:false,paint_field:false,show_error:true,error_element:null,focus_first_error:true,onBeforeError:$lambda(false),onError:$empty,onSuccess:$empty},add_validation:function(c,a,b){if((typeof this.validations[c]=="function")&&!b){var d=this.validations[c];this.validations[c]=function(e){return a(e,d(e))}}else{this.validations[c]=a}},validate:function(e,b){var c=true;var a=$(e).getElements("input[id], select[id], textarea[id]");var d=[];this.options=$merge(this.default_options,b);this.firstError=null;a.each(function(g){if(d=g.id.match(this.field_regexp)){var f=$("container_"+g.name)||$("container_"+d[1])||g.getPrevious("label[for="+g.id+"]")||$(g.form).getElement("label[for="+g.id+"]");c&=this.run_validation_on_field(g,d[3],f,this.options.paint_field)}},this);if(!c){if(this.options.show_error&&this.options.error_element){this.options.error_element.style.display="block"}if(this.options.jump&&this.options.error_element){window.location.href=window.location.href.split("#")[0]+"#"+this.options.error_element.id}}else{if(this.options.show_error&&this.options.error_element){this.options.error_elemen.style.display="none"}}if(this.options.focus_first_error&&this.firstError){this.firstError.focus()}return !!c},run_validation_on_field:function(d,c,b,e){if(!this.validations[c]){return true}var a=true;if((d.hasClass("validates_optional")&&this.validations.gen(d))||!d.hasClass("validates_optional")){a=this.validations[c](d)}if(!a&&this.options){a=this.options.onBeforeError(d,c,b)}if(b){if(!a){this.mark_error(b,d)}else{this.clean_error(b,d)}}if(e){if(!a){this.mark_error(d,d)}else{this.clean_error(d,d)}}if(!a&&!this.firstError){this.firstError=d}if(this.options){this.options["on"+(a?"Success":"Error")](d,c,b)}return a},clone_validation:function(a){return this.validations[a]},mark_error:function(a,c){var b=/^(radio|checkbox)$/.test(c.type)?c.name:c.id;if(a&&!this.has_attr(a,"error_bucket",b)){a.addClass("error");this.add_attr(a,"error_bucket",b)}},clean_error:function(a,c){if(!a){return}var b=/^(radio|checkbox)$/.test(c.type)?c.name:c.id;if(this.has_attr(a,"error_bucket",b)){this.remove_attr(a,"error_bucket",b)}if(a.error_bucket===""){a.removeClass("error")}},has_attr:function(b,a,c){return(" ")?(" "+b[a]+" ").indexOf(" "+c+" ")>-1:b[a].indexOf(c)>-1},add_attr:function(b,a,c){if(!this.has_attr(b,a,c)){b[a]=((typeof b[a]!="undefined"?b[a]+" ":"")+c).replace(/\s{2,}/g," ").replace(/^\s+|\s+$/g,"")}},remove_attr:function(b,a,c){b[a]=b[a].replace(new RegExp("(^|\\s)"+c+"(?:\\s|$)"),"$1").replace(/\s{2,}/g," ").replace(/^\s+|\s+$/g,"")}};RPF.Validator.add_validation("gen",function(a){return(a.value.length>0)});RPF.Validator.add_validation("str",function(a){return(/\w+/.test(a.value))});RPF.Validator.add_validation("txt",RPF.Validator.clone_validation("str"));RPF.Validator.add_validation("mail",function(a){return(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(a.value))});

window.addEvent('domready', function() {
  RPF.activate_autoclear_fields(document.getElements('#blurb input.autoclear'));
  RPF.adjust_footer();
  RPF.adjust_footer.delay(50); // oh dirty chrome, you filthy cheater that trigger domready before it's appropriate
  RPF.center_projects();
  RPF.hook_contact();
  RPF.hook_newsletter();
  RPF.hook_videolinks();
  
  window.addEvent('resize', RPF.adjust_footer);
  window.addEvent('resize', RPF.center_projects);
  
  if ($('projects')) {
    // build magic list of files
    var slides_list = [
      { target: "#jumbo_adly",
        tiles: [
          "adly/adly001.png",
          "adly/adly003.png",
          "adly/adly004.png",
          "adly/adly000.png"
        ]
      },
      { target: "#jumbo_battlearena",
        tiles: [
          "battlearena/battle001.jpg",
          "battlearena/battle002.jpg",
          "battlearena/battle003.jpg",
          "battlearena/battle004.jpg",
          "battlearena/battle005.jpg",
          "battlearena/battle006.jpg",
          "battlearena/battle000.jpg"
        ]
      },
      { target: "#jumbo_bday",
        tiles: [
          "bday/bday002.jpg",
          "bday/bday003.jpg",
          "bday/bday004.jpg",
          "bday/bday005.jpg",
          "bday/bday001.jpg"
        ]
      },
      { target: "#jumbo_bigair",
        tiles: [
          "bigair/bigair001.jpg",
          "bigair/bigair002.jpg",
          "bigair/bigair003.jpg",
          "bigair/bigair004.jpg",
          "bigair/bigair005.jpg",
          "bigair/bigair000.jpg"
        ]
      },
      { target: "#jumbo_circleof8",
        tiles: [
          "circleof8/c8001.jpg",
          "circleof8/c8003.jpg",
          "circleof8/c8004.jpg",
          "circleof8/c8005.jpg",
          "circleof8/c8000.jpg"
        ]
      },
      { target: "#jumbo_golf",
        tiles: [
          "golf/geisergolf001.jpg",
          "golf/geisergolf002.jpg",
          "golf/geisergolf003.jpg",
          "golf/geisergolf004.jpg",
          "golf/geisergolf005.jpg",
          "golf/geisergolf000.jpg"
        ]
      },
      { target: "#jumbo_kulturwar",
        tiles: [
          "kulturwar/kultur002.jpg",
          "kulturwar/kultur003.jpg",
          "kulturwar/kultur004.jpg",
          "kulturwar/kultur005.jpg",
          "kulturwar/kultur006.jpg",
          "kulturwar/kultur001.jpg"
        ]
      },
      { target: "#jumbo_magmamadness",
        tiles: [
          "magmamadness/mm001.png",
          "magmamadness/mm003.png",
          "magmamadness/mm004.png",
          "magmamadness/mm005.png",
          "magmamadness/mm000.png"
        ]
      },
      { target: "#jumbo_operator11",
        tiles: [
          "operator11/011_001.png",
          "operator11/011_002.jpg",
          "operator11/011_003.png",
          "operator11/011_004.png",
          "operator11/011_005.png",
          "operator11/011_006.jpg",
          "operator11/011_0018.jpg",
          "operator11/011_0019.png",
          "operator11/011_0020.png",
          "operator11/011_000.jpg"
        ]
      },
      { target: "#jumbo_orgoo",
        tiles: [
          "orgoo/orgoo001.jpg",
          "orgoo/orgoo002.jpg",
          "orgoo/orgoo003.jpg",
          "orgoo/orgoo004.jpg",
          "orgoo/orgoo000.jpg"
        ]
      },
      { target: "#jumbo_snow",
        tiles: [
          "snow/snow001.jpg",
          "snow/snow002.jpg",
          "snow/snow003.jpg",
          "snow/snow004.png",
          "snow/snow005.jpg",
          "snow/snow000.jpg"
        ]
      },
      { target: "#jumbo_sonymission",
        tiles: [
          "sonymission/sony000.jpg",
          "sonymission/sony001.jpg",
          "sonymission/sony002.jpg",
          "sonymission/sony003.jpg",
          "sonymission/sony0000.png"
        ]
      },
      { target: "#jumbo_upp",
        tiles: [
          "upp/upp001.jpg",
          "upp/upp002.png",
          "upp/upp003.jpg",
          "upp/upp005.jpg",
          "upp/upp006.jpg",
          "upp/upp007.png",
          "upp/upp008.jpg",
          "upp/upp009.jpg",
          "upp/upp000.jpg"
        ]
      },
      { target: "#jumbo_vineswing",
        tiles: [
          "vineswing/vineswing001.jpg",
          "vineswing/vineswing004.jpg",
          "vineswing/vineswing005.jpg",
          "vineswing/vineswing000.jpg"
        ]
      },
      { target: "#jumbo_webos",
        tiles: [
          "webos/webos002.png",
          "webos/webos003.jpg",
          "webos/webos004.jpg",
          "webos/webos005.jpg",
          "webos/webos006.jpg",
          "webos/webos007.jpg",
          "webos/webos008.jpg",
          "webos/webos009.jpg",
          "webos/webos010.jpg",
          "webos/webos001.jpg"
        ]
      },
      { target: "#jumbo_bbp",
        tiles: [
          "bbp/bbp1.jpg",
          "bbp/bbp2.jpg",
          "bbp/bbp3.jpg",
          "bbp/bbp4.jpg",
          "bbp/bbp0.jpg"
        ]
      }
    ];
  
    window.store('slider', new JumbMooSlide({
      slides: slides_list,
      base_path: 'slides/',
      delay: 350,
      duration: 600
    }));
  }
  
  if ($('home_show')) {
    var slides_list = [
      { target: "#home_show",
        tiles: [
          "webos1.jpg",
          "webos2.jpg",
          "golf2.jpg",
          "bbp1.jpg",
          "bbp2.jpg",
          "bbp3.jpg",
          "adly.jpg",
          "unitedpartypeople.jpg",
          "unitedpartypeople_1.jpg",
          "c8_2.jpg",
          "c8_1.jpg",
          "KultureWars.jpg",
          "candombe.jpg",
          "identipik.jpg",
          "operator11.jpg",
          "operator11_2.jpg",
          "Bond1.jpg",
          "webosaurs_2.jpg"
        ]
      }
    ];
      
    window.store('slider', new JumbMooSlide({
      slides: slides_list,
      base_path: 'home/',
      delay: 4000,
      duration: 750
    }));
  }
  
  if ($('case_study')) {
    if (document.getElement('#case_study.webosaurs')) {
      var slides_list = [
      { target: "#case_study .jumbmooslide",
        tiles: [
         "001.jpg",
         "002.jpg",
         "003.jpg",
         "004.jpg",
         "006.jpg",
         "007.jpg",
         "009.jpg",
         "webo_case_study.jpg",
        ]
      }
    ];
      
    window.store('slider', new JumbMooSlide({
      slides: slides_list,
      base_path: 'case_studies/webosaurs/',
      delay: 3000,
      duration: 750
    }));
    }
  }
  
});

window.addEvent('load', function() {
  /* defer loading of google analytics */
  new Asset.javascript((("https:" == document.location.protocol) ? "https://ssl." : "http://www.") + 'google-analytics.com/ga.js', {
    onload: function() {
      try {
      var pageTracker = _gat._getTracker("UA-11361159-1");
      pageTracker._trackPageview();
      } catch(err) {}
    }
  });
});