if ( typeof(DIRECT_SMS) == 'undefined' ) {
  DIRECT_SMS = 0;
}
if ( typeof(OPENSUB) == 'undefined' ) {
  OPENSUB = '';
}

document.observe('dom:loaded',function(){
  // close all open toggle boxes
  //closeAllToggles ( OPENSUB ); // OPENSUB is defined in the main template

  $$('#box_' + OPENSUB).each(
    function(e) { e.show();} // show the selected sub
    );

  // attach events where needed
  try {
    $$('.wo_toggle').each(
      function(oAnchor) {
        oAnchor.observe( 'click', toggle_box );
      }
    );

    $$('.loginForm').each(
      function (form) {
        form.observe( 'submit', validateEmail );
      }
    );

    $$('.submitFromMobile').each(
      function (obj) {
        obj.observe( 'click', sendCodeSMS);
      }
    );


    $$('form.validateMobile').each(
      function (form) {
        form.observe( 'submit', validateMobile );
      }
    );    

    $$('form.getStores').each(
      function (form) {
        form.observe( 'submit', getStores );
      }
    );

    $$('input.nextFromMobile').each(
      function (btn) {
        btn.observe( 'click', nextFromMobile);
      }
    );

    $$('input.nextFromEmail').each(
      function (btn) {
        btn.observe( 'click', nextFromEmail);
      }
    );

    $$('form.registerEmail').each(
      function (form) {
        form.observe( 'submit', registerEmail );
      }
    );

    $$('form.register').each(
      function (form) {
        form.observe( 'submit', register );
      }
    );

    $$('input.hideSubmit').each(
      function ( btn ) {
        btn.observe( 'click', hideSubmit );
      }
    );

    $$('input.hideContainer').each(
      function ( btn ) {
        btn.observe( 'click', hideContainer );
      }
    );

    $$('input.showConfirm').each(
      function ( btn ) {
        btn.observe( 'click', function () { $('confirmUnregisterAll').show() } );
      }
    );

    $$('input.update-shop-btn').each(
      function ( btn ) {
        btn.observe( 'click', updateSub );
      }
    );
    $$('input.update-num-btn').each(
      function ( btn ) {
        btn.observe( 'click', updateSub );
      }
    );

  }  catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }
});

function closeAllToggles ( exclude ) {
  $$('.wo_toggle').each(
    function(oAnchor) {

      var aParts = oAnchor.id.split(/_/);
      var strID = aParts[1];
      if ( strID == exclude ) {
        return;
      }
      var strBoxID = 'box_' + strID;
      var boxObj = $(strBoxID);
      oAnchor.addClassName( 'unselected' );
      oAnchor.removeClassName( 'selected' );
      boxObj.hide();
    }
  );
}

function toggle_box(e) {
  // Toggle the display of a box

  try {
    oAnchor = Event.findElement(e, 'a');
    var aParts = oAnchor.id.split(/_/);
    var strID = aParts[1];
    closeAllToggles ( strID );
    var strBoxID = 'box_' + strID;

    var boxObj = $(strBoxID);
    oAnchor.toggleClassName( 'selected' );
    oAnchor.toggleClassName( 'unselected' );

    Effect.toggle(strBoxID,'slide',{duration:0.3});

  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }

  Event.stop(e);
}

function validateEmail (e) {
  // Make sure that the 'email' form element
  // contains something reseeembling an email address
  var form = $(Event.element(e));

  var email = $(form['coopLoginEmail']).getValue();

  if ( !validate_email(email) ) {
    Event.stop(e);
  }
}

function validate_mobile(mobile_str) {
  // Make sure that mobile_str resembles a valid mobile number
  var mobile_filter = /^(\d{8})$/i;
  var mob_begin_filter = /^[4|9]/;

  if (!mobile_filter.test(mobile_str)){
    alert("Mobilnummer kan bare inneholde tall, 8 siffer.");
    return false;
  }
  if (!mob_begin_filter.test(mobile_str)){
    alert("Mobilnummer må starte på 4 eller 9.");
    return false;
  }
  else {
    return true;
  }
}

function validateMobile(e) {
  // Validate the subscription code sent to a mobile
  var form =  Event.element(e);
  var subId = form.id.match(/_(\d+)/)[1];

  form.request (
      {
        onSuccess: function(resp) {
          try {
            var state = resp.responseText;
            if ( state.match(/^OK/) ) {
              var url = $(form).getInputs('hidden', 'url');
              window.location = url[0].value;
              $('validateMobileMessage_' + subId).innerHTML = 'Ditt abonnement er aktivert';
              $('validateMobileMessage_' + subId).show();
            } else {
              $('validateMobileMessage_' + subId).innerHTML = 'Du har skrevet inn feil kode, prøv igjen.';
              $('validateMobileMessage_' + subId).show();
            }
          }
          catch (err) {
            var msg = err.description ? err.description : err;
            alert( msg );
          }
        }
      });

  Event.stop(e);
}

function getStores(e) {
  // Retrieves store IDs given a postcode
  // Displays radio buttons for them
  var form =  Event.element(e);
  var id = form.id.match(/_(\d+)/)[1];
  if ( id == undefined ) {
    id = '';
  }
  var iPostalcode = $('zip_' + id).value;
  if ((iPostalcode == "") || (iPostalcode == "undefined")) {
    alert("Skriv inn ditt postnummer");

  } else {

    var loadingMessage = "Henter butikkliste, vennligst vent litt...<br /><br />\n";
    $('message_'+ id).innerHTML = loadingMessage;
    form.request (
      {
        onSuccess: function(resp) {
          try {
            var myXML = resp.responseXML;
            var storeArray = myXML.getElementsByTagName('store');
            var dataArrayLen = storeArray.length;

            var chooseShopContainer = $('shopChoose_' + id);
            var radioButtonsContainer = chooseShopContainer.down('fieldset');
            radioButtonsContainer.innerHTML = '';

            for ( var i=0; i < dataArrayLen; i++ ) {
              var attr =  storeArray[i].attributes;
              var storeName;
              var storeId;
              // IE cannot do attr.NAVN.value
              for ( var j=0; j<attr.length; ++j ) {
                if ( attr[j].name == 'NAVN' ) {
                  storeName = attr[j].value;
                } else if ( attr[j].name == 'SAPID' ) {
                  storeId = attr[j].value;
                }
              }
              var pTag = new Element( 'p', { 'class': "store-name"} );
              var radioid = 'storeradio_'+ id +'_'+ i;

              var storeRadio = new Element('input', 
                { type: 'radio', name: "store", id: radioid, 'storename': storeName }
              );

              storeRadio.className = 'radio';
              storeRadio.value = storeId + '|' + storeName;

              pTag.appendChild( storeRadio );

              var storeLabel = new Element('label', {'for': radioid});
              storeLabel.update( storeName );
              pTag.appendChild( storeLabel );
              
              radioButtonsContainer.appendChild(pTag);
            }

            var btn = $('next-btn_' + id);
            if ( btn == undefined ) {
              btn = $('send-btn_' + id);
            }
            if ( btn != undefined ) {
              btn.show();
            }

            Effect.SlideUp( 'message_'+ id, {duration:0} );
            Effect.SlideDown( 'shopChoose_'+ id, {duration:0.3} );

          }
          catch (err) {
            var msg = err.description ? err.description : err;
            alert( msg );
          }
        }
      });
  }

  Event.stop(e);
}

function nextFromMobile (e) {

  try {
    Event.stop(e);
    var btn = Event.element(e);
    var id = btn.id.match(/_(\d+)/)[1];

    btn.hide();

    Effect.SlideDown( 'submitSub_'+ id, {duration:0.3} );

  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }
}

function nextFromEmail (e) {
  // Show the final submit form containing the newsletter subscription option
  // and hide the previous step form
  try {

    Event.stop(e);

    var btn = Event.element(e);
    var form = $(btn).up('form'); // the form of the button that was clicked
    var id = form.id.match(/_(\d+)/)[1];
    var storename;
    var shopRadio = form.getInputs('radio', 'store');
    shopRadio.each(
      function ( radio ) {
        if ( radio.checked ) {
          storename = $(radio).readAttribute('storename');
          // store id ????
        }
      }
    );

    if ( shopRadio[0] != undefined && storename == undefined ) {
      alert( "Du må velge butikk" );
      return false;
    }
    var shopname = $('shopname_'+ id);
    if ( shopname ) {
      shopname.update( storename );
    }
    Effect.SlideDown( 'submitSub_'+ id, {duration:0.3} );
    if ( $('shopChoose_'+ id) ) {
      Effect.SlideUp( 'shopChoose_'+ id, {duration:0.1} );
    }
    if ( $('zipcode_'+ id) ) {
      Effect.SlideUp( 'zipcode_'+ id, {duration:0.1} );
    }
    btn.hide();

  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }
}

function hideSubmit (e) {
  // Hide the final submit form, possibly containing the newsletter subscription option
  // and show the previous step form

  var btn = Event.element(e);
  var id = btn.id.match(/_(\d+)/)[1];

  if ( $('zipcode_'+ id) ) {
    Effect.SlideDown( 'zipcode_'+ id, {duration:0.3} );
  }

  var btn = $('next-btn_'+ id);
  if ( btn == undefined ) {
    btn = $('send-btn_'+ id);
  }
  if ( btn != undefined ) {
    btn.show();
  }

  Effect.SlideUp( 'submitSub_'+ id, {duration:0.3} );
}

function hideContainer (e) {
  // Hide the container of an object
  var btn = Event.element(e);
  var container = btn.parentNode;
  container.hide();
}

function registerEmail (e) {
  // Trigger the sending of a subscription code by email
  var func = new Element( 'input', {type: 'hidden', name: 'func', value: 'subscription.register'} )
  var form =  Event.element(e);
  var id = form.id.match(/_(\d+)/)[1];

  form.appendChild( func );
  form.appendChild( new Element('input', {type: 'hidden', name: 'debug', value: 'off'}) );

  form.request (
      {
         onSuccess: function (resp) {
           var state = resp.responseText;
           var success = state.indexOf('success') + 1;
           if ( success ) {
             Effect.SlideUp( 'newsform_'+ id, {duration:0.3} );
             Effect.SlideUp( 'stores_'+ id, {duration:0.3} );

             $('message_' + id).innerHTML = 'En e-post har blitt sendt til din oppgitte e-postadresse.';

             Effect.toggle( 'box_'+ id, 'slide', {duration:0.3} );

           } else {

             $('shopContainer_' + id).innerHTML = 'Ukjent feil!<br><pre style="font-size: 12px">'+ state +'</pre>'+ success;
           }
         }
       });

  Event.stop(e);
}


function sendCodeSMS(e) {
  // Triggers the sending of the subscription code to a mobile
  // and shows the form for entering it
  try {

    var btn = Event.element(e);
    var form = $(btn).up('form'); // the form of the button that was clicked
    var mobInput = $(form['mobileNumber']);
    var mobNumber = mobInput.value;
    if ( ! validate_mobile(mobNumber) ) {
      Event.stop(e);
      return;
    }

    var func = $(form['func']);
    if ( func ) {
      func.value = 'subscription.register';
    } else {
      func = new Element('input', {type: 'hidden', name: 'func', value: 'subscription.register'});
      form.appendChild( func );
    }

    var id = form.id.match(/_(\d+)/)[1];
    form.request (
        {
           onSuccess: function (resp) {
             Effect.SlideDown('validateform_'+ id, {duration: 0.1} );
             Effect.SlideUp( 'register_'+ id, {duration:0.3} );
             Event.stop(e);
           }
           });

  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }
  Event.stop(e);
}

function register (e) {

  try { 
    var form = Event.element(e);
    var id = form.id.match(/_(\d+)/)[1];
  
    var mobile = $('mobile_' + id);
    if ( mobile ) {
      var mNumber = mobile.value;
      if ( ! validate_mobile(mNumber) ) {
        Event.stop(e);
        return;
      }
    }

    var mobileCheck = $('newProductsMob_' + id);
  
    if ( mobileCheck && mobileCheck.checked ) {
      var mobileNumber = $('mobileNews_' + id); 
      if ( ! validate_mobile(mobileNumber.value) ) {
        Event.stop(e);
        return;
      }
  
      if ( ! DIRECT_SMS ) {
        // Send validation SMS
        var func = $(form['func']);
        if ( func ) {
          func.value = 'subscription.register';
        } else {
          func = new Element('input', {type: 'hidden', name: 'func', value: 'subscription.register'});
          form.appendChild( func );
        }

        var id = form.id.match(/_(\d+)/)[1];
        form.request (
          {
            onSuccess: function (resp) {
              Effect.SlideDown( 'validateform_'+ id, {duration: 0.1} );
              Effect.SlideUp( 'register_'+ id, {duration:0.3} );
              Event.stop(e);
            }
          });
          Event.stop(e);
      }
    }
  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }

}

/** Function used from the flash map **/
function selectStoreExtra( store ) {
  // from storemap_extra.swf
  // Coop Extra - Kundeavis
  _doSelectStoreFromMap ( 49, store );// TODO hardcoded subId
}
function selectStoreBygg( store ) {
  // from storemap_obsbygg.swf
  // Coop Bygg - Kundeavis
  _doSelectStoreFromMap ( 55, store );// TODO hardcoded subId
}
function selectStore( store ) {
  // from storemap.swf
  // Coop Obs - Kundeavis
  _doSelectStoreFromMap ( 52, store );// TODO hardcoded subId
}

function _doSelectStoreFromMap ( subId, store ) {
  /** This is called by the flash map    **/
  /** subId is the subscription ID       **/
  /** store is "<store id>|<store name>" **/

  try {
    var aStore = store.split( '|' );
    var storeId = aStore[0];
    var storeName = aStore[1];

    $('shopname_'+ subId).update( storeName );

    var form = $('register_'+ subId);
    var shopSelect = new Element('input', {type: 'radio', style: 'display:none', name: 'store', value: store, storename: storeName});
    form.appendChild( shopSelect );
    shopSelect.checked = true; /* IE wants 'checked' to be set after the object is appended */

    Effect.SlideDown( 'submitSub_'+ subId, {duration:0.3} );

  } catch (err) {
    var msg = err.description ? err.description : err;
    alert( msg );
  }
}

function updateSub ( e ) {

  var btn = Event.element(e);
  var id = btn.id.match(/_(\d+)/)[1];

  Effect.SlideDown( 'subRegister_' + id, {duration:0.3} );
  Effect.SlideUp( 'subUnregister_' + id, {duration:0.3} );

  Event.stop(e);
}
