var SurfDOM = {};

Request.implement({
    showIndicator:function(){
        $(document.body).addClass('loading');
    },
    removeIndicator:function(){
        $(document.body).removeClass.delay(500,$(document.body),'loading');
    },
    onStateChange: function(){
        this.showIndicator();
        if (this.xhr.readyState != 4 || !this.running) return;
        this.removeIndicator();
        this.running = false;
        this.status = 0;
        $try(function(){
            this.status = this.xhr.status;
        }.bind(this));
        if (this.options.isSuccess.call(this, this.status)){
            this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
            this.success(this.response.text, this.response.xml);
        } else {
            this.response = {text: null, xml: null};
            this.failure();
        }
        this.xhr.onreadystatechange = $empty;
    }
})

SurfDOM.Application = new Class({
  Scriptify: function()
  {
    var i;
    var arr = $$('.rounded');
    for (i = 0; i < arr.length; i++)
    {
      SurfDOM.app.Rounded($(arr[i]));
    }
    var cb = $$('.cataloguebox');
    var sb = $$('.categorylist');
    if (cb.length == 1 && sb.length == 0)
    {
      cb.setStyle('width', 'auto');
    }
    $$('a').each(function(anchor) {
      var target = anchor.getProperty('target');
      if (target && target == '_blank')
      {
        href = anchor.get('href');
        if (!href.contains('mp3'))
        {
            anchor.addEvent("click", SurfDOM.app.LargeImageClick);
        }
      }
    });
    var helpTip = new Tips($$('.linkhelp'));
    var el = $('rajmain');
    el.getElements('.aj').addEvent('click', SurfDOM.app.LinkClick);
    el.getElements('.ajp').addEvent('click', SurfDOM.app.OrderClick);
    el.getElements('.ajpsub').addEvent('click', SurfDOM.app.OrderSubmit);
    var cButton = $('currencyButton');
    if ($defined(cButton)) {
      $('currencyDropdown').addEvent('change', SurfDOM.app.CurrencyChange);
      cButton.dispose();
      el.getElements('.price').addEvent('change', SurfDOM.app.CurrencyChange);
    }
    var uButton = $('updateButton')
    if ($defined(uButton)){
      uButton.dispose()
    }
    var sButton = $('shippingButton')
    if ($defined(sButton)) {
      $('shippingMethodDropdown').addEvent('change', SurfDOM.app.ShippingMethodChange);
      sButton.dispose()
    }
    tp = $('tipContainer');
    if ($defined(tp)) { tp.setStyle('visibility', 'hidden'); }
  },
  LinkClick: function(event) {
    event.stop();
    var t = $(event.target);
    if (t.get('tag') == 'img')
    {
      t = t.getParent()
    }
    var hr = t.href;
    var el = $('content');
    var sPage = SurfDOM.app.GetPageName(hr);
    el.store('PageName', sPage);
    var myRequest = new Request.HTML({method: 'get', url: hr, data: '', update: el, onSuccess: SurfDOM.app.Scriptify}).send();
  },
  OrderClick: function(event) {
    event.stop();
    var t = $(event.target);
    if (t.get('tag') == 'img')
    {
      t = t.getParent()
    }
    var hr = t.href;
    var el = $('formcontent');
    var sPage = SurfDOM.app.GetPageName(hr);
    el.store('PageName', sPage);
    var myRequest = new Request.HTML({method: 'get', url: hr, data: '', update: el, onSuccess: SurfDOM.app.Scriptify}).send();
  },
  OrderSubmit: function(event) {
    event.stop();
    var el = $('formcontent');
    var sText;
    var target = $(event.target)
    sText = target.get('rel')
    if (!$defined(sText)) sText = el.retrieve('PageName') +'.aspx';
    var sData = $('formcontent').toQueryString();
    sData = sData.replace(/__VIEWSTATE[^&]*&/,"");
    sData += "&_Button=" + event.target.name;
    var myRequest = new Request.HTML({method: 'post', url: sText,data: sData, update: el, onSuccess: SurfDOM.app.Scriptify}).send();
  },
  GetPageName: function(sVal){
    var start = sVal.lastIndexOf('/');
    start = start > -1 ? ++start : 0;
    var end = sVal.indexOf('.aspx');
    return sVal.slice(start, end);
  },
  ShippingMethodChange: function(){
    var el = $('formcontent');
    var cg = $('cataloguegroup');
    var sUrl = 'order.aspx';
    var sData = $('formcontent').toQueryString();
    sData = sData.replace(/__VIEWSTATE[^&]*&/,"");
    if (sData.length > 0){
        sData += "&calc_shipping=" + 'calc_shipping';
        if ($defined(cg))
        {
          var rv = cg.get('rel')
          aVals = rv.split(';');
          sUrl = aVals[0] + '.aspx';
          if (aVals.length > 1){
            sData += '&group=' + aVals[1] + '&item=' + aVals[2];
          }
          el = $('content');
        }
        var myRequest = new Request.HTML({method: 'post', url: sUrl,data: sData, update: el, onSuccess: SurfDOM.app.Scriptify}).send();
    }
  },
  CurrencyChange: function() {
    var el = $('formcontent');
    var cg = $('cataloguegroup');
    var sUrl = 'order.aspx';
    var sData = $('formcontent').toQueryString();
    sData = sData.replace(/__VIEWSTATE[^&]*&/,"");
    if (sData.length > 0){
        sData += "&_Button=" + 'save_order' + '&set_currency=true';
        if ($defined(cg))
        {
          var rv = cg.get('rel')
          aVals = rv.split(';');
          sUrl = aVals[0] + '.aspx';
          if (aVals.length > 1){
            sData += '&group=' + aVals[1] + '&item=' + aVals[2];
          }
          el = $('content');
        }
        var myRequest = new Request.HTML({method: 'post', url: sUrl,data: sData, update: el, onSuccess: SurfDOM.app.Scriptify}).send();
    }
  }, 
  UpdateOrder: function() {
    alert('Update order.');
  }, 
  LargeImageClick: function(e)
  {
    var ev = new Event(e);
    ev.stop();
    var target = $(ev.target);
    var href = target.getParent().getProperty('href');
    var title = target.getProperty('alt');
    Slimbox.open(href, title);
  },
  LargeImageLoaded: function()
  {
    $('popupMessageDiv').effect('opacity').start(1,0);
  },
  Rounded: function(el, size)
  {
    var rev = el.getProperty('rev');
    var color = el.getStyle('background-color');
    var par = el.getParent();
    while (par.getStyle('background-color') == 'transparent')
    {
      par = par.getParent();
    }
    var bk = par.getStyle('background-color');
    SurfDOM.app.AddTop(el,bk,$defined(rev)? rev : color,size);
    SurfDOM.app.AddBottom(el,bk,color,size);
  },
  AddTop: function(el, bk, color, size)
  {
    var i;
    var d = new Element('b');
    var cn = 'r';
    var lim = 4;
    if (size && size == 'small'){ cn = 'rs', lim = 2 }
    d.setProperty('class','rtop');
    d.setStyle('background-color', bk);
    for (i = 1; i <= lim; i++)
    {
      var x = new Element('b');
      x.setProperty('class', cn + i);
      x.setStyle('background-color', color);
      x.injectInside(d);
    }
    d.injectTop(el);
  },
  AddBottom: function(el, bk, color, size)
  {
    var i;
    var d = new Element('b');
    var cn = 'r';
    var lim = 4;
    if (size && size == 'small'){ cn = 'rs', lim = 2 }
    d.setProperty('class','rbottom');
    d.setStyle('background-color', bk);
    for (i = lim; i > 0; i--)
    {
      var x = new Element('b');
      x.setProperty('class', cn + i);
      x.setStyle('background-color', color);
      x.injectInside(d);
    }
    d.injectInside(el);
  }
});

window.addEvent('domready', function(e){
  SurfDOM.app = new SurfDOM.Application();
  SurfDOM.app.Scriptify();
})