var mws = {};

mws.flagBaseURL = "http://l.yimg.com/a/i/uk/cl/mob/icon/flags/";
mws.smsPhoneNumber = null;
mws.smsDefaultCountry = null;
mws.smsDefaultCountryOrg = null;
mws.smsDefaultLanguage = null;
mws.smsCaptchaPassed = false;
mws.smsCaptchaError = false;

// north american countries; we show 3-box phone entries
mws.na_countries = new Array('US', 'CA', 'DO', 'AG', 'BM', 'KY', 'DM', 'GD', 'JM', 'MS', 'LC', 'TT', 'TC');

// list of input fields
mws.inputs = new Array('areacode', 'phonepart1', 'phonepart2');

mws.needCaptcha = function() {
  var cc = mws.selectedCountry();

  if (cc == 'ES' || cc == 'IT') {
    return true;
  } else {
    return false;
  }
};

// more reliable than by number
mws.updateCountrySelect = function(isoCode) {
  var countrySelect = document.forms['enterphonenumber'].countrylist.options;
  for(var i = 0; i < countrySelect.length; i++) {
    if (countrySelect[i].value.toUpperCase() == isoCode.toUpperCase() ) {
      document.forms['enterphonenumber'].countrylist.selectedIndex = i;
    }
  }
};

mws.switchcountry = function(countryIndex) {
  var countryCode = mws.selectedCountry();
  mws.clearElement('areacode');
  mws.clearElement('phonepart1');
  mws.clearElement('phonepart2');
  mws.writeCountry(countryCode);
  mws.resetSMSForm();
  mws.initInput(true);
};

mws.selectedCountry = function() {
  if (document.getElementById('smsCountryList')) {
    var cl = document.getElementById('smsCountryList');
    return cl[cl.selectedIndex].value ? cl[cl.selectedIndex].value : '';
  }
};

mws.clearCountry = function() {
  if (document.getElementById('smsCountryList')) {
    var cl = document.getElementById('smsCountryList');
    cl[cl.selectedIndex].value = tracking.cc;
    cl[cl.selectedIndex].text = localizedCountryData[tracking.cc][0];
  }
};

mws.toggleElement = function(e) {
  if (document.getElementById(e)) {
    var el = document.getElementById(e);
    if (el.style.display == 'block') {
      el.style.display = 'none';
    } else {
      el.style.display = 'block';
    }
  }
};

mws.showElement = function(e, inline) {
  if (!inline) {
    inline = false;
  }

  if (document.getElementById(e)) {
    document.getElementById(e).style.display = inline ? 'inline' : 'block';
  }
};

mws.hideElement = function(e) {
  if (document.getElementById(e)) {
    document.getElementById(e).style.display = 'none';
  }
};

mws.clearElement = function(e) {
  var elem = document.getElementById(e);

  if (elem && elem.innerHTML) {
    elem.innerHTML = '';
  }

  if (elem && elem.value) {
    elem.value = '';
  }
};

mws.initInput = function(reset) {
  if (!reset) {
    mws.clearCountry();
  }
  var selectedCC = mws.selectedCountry();
  for(var i=0; i<mws.inputs.length; i++) {
    var input = mws.inputs[i];
    if (document.getElementById(input)) {
      if (mws.na_countries.in_array(selectedCC) ||
          (!mws.na_countries.in_array(selectedCC) && input != 'areacode')) {
        document.getElementById(input).value = '';
      }
    }
    YAHOO.util.Event.on(input,'change', mws.checkInput);
    YAHOO.util.Event.on(input,'keyup', mws.checkInput);
    YAHOO.util.Event.on(input,'click', function () { mws.hideElement('error_flyout'); mws.showElement('number_flyout'); });
    YAHOO.util.Event.on(input,'blur', function () { mws.hideElement('number_flyout'); });

    if (mws.na_countries.in_array(selectedCC) && input == 'areacode') {
      YAHOO.util.Event.on(input,'keyup', function () { mws.AutoTab('areacode', 3, 'phonepart1'); });
    } else if (mws.na_countries.in_array(selectedCC) && input == 'phonepart1') {
      YAHOO.util.Event.on(input,'keyup', function () { mws.AutoTab('phonepart1', 3, 'phonepart2'); });
    } else if (mws.na_countries.in_array(selectedCC) && input == 'phonepart2') {
      YAHOO.util.Event.on(input,'keyup', function () { mws.AutoTab('phonepart2', 4, 'submit'); });
    }
  }
};

mws.checkInput = function(e) {
  var selectedCC = mws.selectedCountry();
  for(var i=0; i<mws.inputs.length; i++) {
    var valid = true;
    var input = mws.inputs[i];
    var value = document.getElementById(input) ? document.getElementById(input).value : '';
    if (mws.validPhoneNumber()) {
      YAHOO.util.Dom.replaceClass('phoneentry', 'phoneentry_invalid', 'phoneentry_valid');
      break;
    } else {
      YAHOO.util.Dom.replaceClass('phoneentry', 'phoneentry_valid', 'phoneentry_invalid');
      if (!mws.na_countries.in_array(selectedCC) && input == 'areacode') {
        value = value.replace(/\+/, '');
      }

      if (value.match(/\D/)) {
        document.getElementById('err_char').innerHTML = value.match(/\D/);
        document.getElementById(input).value = mws.stripNonNumeric(value);
        mws.hideElement('number_flyout');
        mws.showElement('error_flyout');
        break;
      } else {
        mws.hideElement('error_flyout');
      }
    }
  }
};

mws.validPhoneNumber = function() {
  var a = document.getElementById('areacode') ? document.getElementById('areacode').value : '';
  var p1 = document.getElementById('phonepart1') ? document.getElementById('phonepart1').value : '';
  var p2 = document.getElementById('phonepart2') ? document.getElementById('phonepart2').value : '';

  if (mws.na_countries.in_array(mws.selectedCountry())) {
    return (a.match(/^\d{3}$/) && p1.match(/^\d{3}$/) && p2.match(/^\d{4}$/));
  } else {
    // strip off leading 0
    p1 = p1.replace(/^0/i, '');

    // if user put country code in phonepart1, strip it off
    var a = a.replace(/\+/, '');
    a = a.replace(/\(/, '\\(');
    p1 = p1.replace(new RegExp('^\\+' + a, 'g'), '');

    return mws.nonNANumberCheck(p1);
  }
};

mws.createPhoneEntry = function(isoCode) {
  var code_for_boxes = "";
  var boxsize = 18; // used for non-US/CA countries

  var a = document.getElementById('areacode') ? document.getElementById('areacode').value : '';
  var p1 = document.getElementById('phonepart1') ? document.getElementById('phonepart1').value : '';
  var p2 = document.getElementById('phonepart2') ? document.getElementById('phonepart2').value : '';

  if(mws.na_countries.in_array(isoCode)) {
    code_for_boxes = '<input style="width:27px;" name="areacode" type="text" id="areacode" value="'+a+'" size="3" maxlength="3" class="us" />';
    code_for_boxes += ' - <input style="width:27px;" name="phonepart1" type="text" id="phonepart1" value="'+p1+'" size="3" maxlength="3" class="us" />';
    code_for_boxes += ' - <input style="width:35px;" name="phonepart2" type="text" id="phonepart2" value="'+p2+'" size="4" maxlength="4" class="us" />';
  } else {
    //if(isoCode != 'TH' && isoCode != 'TW' && isoCode != 'AU') {
      code_for_boxes += '+' + localizedCountryData[isoCode][1] + " ";
    //}
    code_for_boxes += '<input type="hidden" name="areacode" id="areacode" value="+' + localizedCountryData[isoCode][1] + '" />';
    code_for_boxes += '<input id="phonepart1" name="phonepart1" type="text" maxlength="' + boxsize + '" size="12" value="'+p1+'" />';
  }
  code_for_boxes += '<input style="width:0px;height:0px;border:0;float:left;" type="submit" value="" />';
  return code_for_boxes;
};

mws.updateCountryFlag = function(isoCode) {
  var ext = ".png";
  var flagBaseURL = "http://l.yimg.com/a/i/us/cl/mob/v3/gen/flags/";
  var flagEl = YAHOO.util.Dom.get('smsCountryFlag');
  if (typeof document.body.style.maxHeight != "undefined") {
    // IE 7, mozilla, safari, opera 9 *** set the background
    flagEl.style.backgroundImage = "url('" + flagBaseURL + isoCode + ext +"')";
  } else {
    // IE6, older browsers  *** use the AlphaImageLoader filter
    if(flagEl.src) {
      var src = img.src;
      img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='crop')";
      img.src = "http://l.yimg.com/a/i/us/cl/mob/js/x.gif";
    } else {
      flagEl.style.visibility = "visible";
      if ( flagEl )
      {
        flagEl.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + flagBaseURL + isoCode + ext + "', sizingMethod='crop')";
        flagEl.style.backgroundImage = "url(http://l.yimg.com/a/i/us/cl/mob/js/x.gif)";
      }
    }
  }
};

mws.fnFixPng = function(img) {
  if(img.currentStyle && !window.getComputedStyle) // only IE
  {
    if(img.src) {
      var src = img.src;
      img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='crop')";
      img.src = "http://l.yimg.com/a/i/us/cl/mob/js/x.gif";
    } else {
      var bg = img.currentStyle.backgroundImage;
      var src = bg.substring(5,bg.length-2);
      img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='crop')";
      img.style.backgroundImage = "url(http://l.yimg.com/a/i/us/cl/mob/js/x.gif)";
    }
  }
};


mws.writeCountry = function(isoCode) {
  //alert(isoCode);
  if (!isoCode) return false;
  mws.updateCountryFlag(isoCode);
  document.getElementById('us_or_other').innerHTML = localizedCountryData[isoCode][0];
  var entry = mws.createPhoneEntry(isoCode);
  document.getElementById('phoneentry').innerHTML = entry;
};

mws.AutoTab = function(current, maxLength, next){
  var tn = document.getElementById(current).value;
  var currentLength = tn.length;
  next = document.getElementById(next);
  if(currentLength== maxLength) {
    if(next.value=="") {
      next.focus();
      next.select();
    }
  }
};

mws.showVisualThankYou = function() {
  mws.showElement('cta_thankyou');
  YAHOO.mobileReg.container.cta_thankyou.show();
};

mws.showYMobLandingThankYou  = function() {
    mws.showElement('cta_eyebrow');
    YAHOO.mobileReg.container.cta_eyebrow.show();
};

mws.sendSMS = function(o) {
  var json = YAHOO.lang.JSON.parse(mws.cleanWSOutput(o.responseText));

  // show debug msg
  if (json.smsres.debug_msg) {
    document.getElementById("debug").innerHTML = json.smsres.debug_msg;
    mws.showElement('debug');
    YUI().use('dd-drag', function(Y) {
        var dd = new Y.DD.Drag({
            node: '#debug'
        });   
    });
  }

  //alert('intl -> '+tracking.intl);
  if (json.smsres.error) {
    //alert(json.smsres.error);
    //alert(json.smsres.error_number);
    if (json.smsres.error == 'US_Verizon') {
      if (tracking.bktid == 'VISUAL') {
        mws.showVisualThankYou();
      } else {
        mws.showElement('verizoncta');
      }

      mws.hideElement('first_ctabox');
      mws.trackBeacon('Verizon');
      mws.trackSEMCampaign();
      mws.trackClick2Sales();
      mws.trackAGOF();
    } else {
      mws.trackBeacon('Error_'+json.smsres.error);
      if (json.smsres.error == 'bad_carrier') {
        mws.hideElement('ctamodule');
        mws.showElement('sorry');
        mws.showElement('sorry_badcarrier');
      } else if (json.smsres.error == 'invalid_numberb') {
        document.getElementById('badnumber').innerHTML = json.smsres.error_number;
        mws.hideElement('ctamodule');
        mws.showElement('sorry');
        mws.showElement('sorry_badnumber');
      } else {
        // catch all
        mws.hideElement('ctamodule');
        mws.showElement('sorry');
        mws.showElement('sorry_security');
      }
    }
  } else {
    mws.hideElement('ctamodule');
    mws.hideElement('number_flyout');

    if (tracking.bktid == 'VISUAL') {
      mws.showVisualThankYou();
    } else if (tracking.bktid == 'YMOBLANDING') {
      mws.showYMobLandingThankYou();
    } else  {
      mws.showElement('thankyou');
    }

    mws.trackBeacon('Success');
    mws.trackSEMCampaign();
    mws.trackClick2Sales();
    mws.trackAGOF();
  }

  mws.smsCaptchaPassed = false;
};

mws.closeVisualThankyou = function(o) {
  YAHOO.mobileReg.container.cta_thankyou.hide();
  mws.showSMSForm();
};

mws.closeYMobLandingThankYou= function(o) {
  YAHOO.mobileReg.container.cta_eyebrow.hide();
  mws.showSMSForm();
};


mws.procSMSForm = function() {
  var valid_us_num = true;
  var phone_num = "";
  var phone_num_display = "";

  // params needed to send SMS
  var selectedCC = mws.selectedCountry();
  var areacode = document.getElementById('areacode').value;
  var crumb = document.getElementById('_crumb').value;
  var phonepart1 = document.getElementById('phonepart1').value;
  var phonepart2 = '';
  var non_na_number_checked = true;

  // clear out error msg, etc.
  mws.resetSMSForm();

  if (mws.na_countries.in_array(selectedCC)) {
    phonepart2 = document.getElementById('phonepart2').value;
    document.getElementById('phonepart2').value = phonepart2;

    phone_num = areacode + phonepart1 + phonepart2;
    phone_num_display = areacode + '-' + phonepart1 + '-' + phonepart2;

    if (!areacode.match(/^\d{3}$/) || !phonepart1.match(/^\d{3}$/) || !phonepart2.match(/^\d{4}$/)) {
      valid_us_num = false;
    }
  } else {
    // strip off leading 0
    phonepart1 = phonepart1.replace(/^0/i, '');

    // if user put country code in phonepart1, strip it off
    var a = areacode.replace(/\+/, '');
    phonepart1 = phonepart1.replace(new RegExp('^\\+' + a, 'g'), '');

    phone_num = areacode + phonepart1;
    phone_num_display = areacode + '-' + phonepart1;
    non_na_number_checked = mws.nonNANumberCheck(phonepart1);
  }

  document.getElementById('areacode').value = areacode;
  document.getElementById('phonepart1').value = phonepart1;

  //alert('phone_num: ' + phone_num + ' -> ' + phone_num_display);
  //alert('valid_us_num -> ' + valid_us_num);

  mws.smsPhoneNumber = phone_num_display;

  if (!valid_us_num || isNaN(phone_num) || phone_num == '' || !non_na_number_checked) {
    //mws.showElement('error_flyout');
    //mws.trackBeacon('Error_invalid_numberf');
  } else {
    if (mws.requireCaptcha(mws.selectedCountry()) && !mws.smsCaptchaPassed) {
      var callbacks = {
        success: mws.showCaptcha,
        failure: function (o) {alert('Submission failed: ' + o.status);}
      };
      var url = '/bin/captcha.mw';
      YAHOO.util.Connect.asyncRequest('GET', url, callbacks);
    } else {
      document.getElementById('smssentnumber').innerHTML = phone_num_display;
      document.getElementById('badcarriernumber').innerHTML = phone_num_display;
      if (document.getElementById('cta_thankyou_number')) {
        document.getElementById('cta_thankyou_number').innerHTML = phone_num_display;
      }
      if (document.getElementById('cta_eyebrow_thankyou_number')) {
        document.getElementById('cta_eyebrow_thankyou_number').innerHTML = phone_num_display;
      }


      var callbacks = {
        success: mws.sendSMS,
        failure: function (o) {alert('Submission failed: ' + o.status);}
      };

      var url = '/bin/sendSMS.mw?type='+tracking.type+'&service='+tracking.service+'&subnav='+tracking.subnav+'&bktid='+tracking.bktid+'&conv='+tracking.conv+'&country='+selectedCC+'&areacode='+areacode+'&phonepart1='+phonepart1+'&phonepart2='+phonepart2+'&crumb='+crumb+'&spaceid='+tracking.spaceid+'&refer='+tracking.refer+'&tsrc='+tracking.tsrc+'&devwidgetid='+tracking.devwidgetid;
      YAHOO.util.Connect.asyncRequest('GET', url, callbacks);
    }
  }
};

mws.showSMSForm = function() {
  mws.showElement('ctacontainer');
  mws.showElement('first_ctabox');
  mws.showElement('ctamodule');
  mws.resetSMSForm();
  //mws.clearElement('areacode');
  //mws.clearElement('phonepart1');
  //mws.clearElement('phonepart2');
  mws.writeCountry(mws.selectedCountry());
  mws.initInput(true);
};

mws.resetSMSForm = function() {
  mws.hideElement('error_flyout');
  mws.hideElement('number_flyout');
  mws.hideElement('debug');
  mws.hideElement('sorry');
  mws.hideElement('captchbox');
  mws.hideElement('thankyou');
  mws.hideElement('verizoncta');
  YAHOO.util.Dom.replaceClass('phoneentry', 'phoneentry_valid', 'phoneentry_invalid');
  mws.clearElement('debug');
};

mws.stripNonNumeric = function(s) {
  return s.replace(/\D/g, '');
};

mws.nonNANumberCheck = function(num) {
  // non-NorthAmerica numbers must be 6-18 digits excluding country codes
  return num.match(/^\d{6,18}$/);
};

mws.requireCaptcha = function(cc) {
  var cl = 'IT';
  return cl.match(cc);
};

mws.checkCaptcha = function(o) {
  var json = YAHOO.lang.JSON.parse(mws.cleanWSOutput(o.responseText));

  if (json.captcha.result == 'SUCCESS') {
    mws.hideElement('captchbox');
    mws.smsCaptchaPassed = true;
    mws.procSMSForm();
  } else {
    var callbacks = {
      success: mws.showCaptcha,
      failure: function (o) {alert('Submission failed: ' + o.status);}
    };
    var url = '/bin/captcha.mw';
    YAHOO.util.Connect.asyncRequest('GET', url, callbacks);
    mws.smsCaptchaError = true;
    mws.showElement('captcha_msg');
  }
};

mws.showCaptcha = function(o) {
  var json = YAHOO.lang.JSON.parse(mws.cleanWSOutput(o.responseText));
  document.getElementById("cimage").src = json.captcha.image;
  document.getElementById("_secdata").value = json.captcha.data;
  document.getElementById("_secword").value = '';
  mws.showElement('captchbox');
  mws.hideElement('ctamodule');
  if (!mws.smsCaptchaError) mws.hideElement('captcha_msg');
};

mws.procCaptcha = function() {
  var secdata = document.getElementById('_secdata').value;
  var secword = document.getElementById('_secword').value;
  var callbacks = {
    success: mws.checkCaptcha,
    failure: function (o) {alert('Submission failed: ' + o.status);}
  };
  var url = '/bin/captcha.mw?action=CHECK&secdata='+secdata+'&secword='+secword;
  YAHOO.util.Connect.asyncRequest('GET', url, callbacks);
};

mws.showAnswer = function(e, params) {
  var question = params[0];
  var answer = params[1];
  var count = params[2];
  var current = params[3];

  for (var i=1; i<=count; i++) {
    var a = answer+i;
    if (i == current) {
      mws.toggleElement(a);
      mobile.toggleClass(question+i, 'hideTrigger');
    } else {
      mws.hideElement(a);
      YAHOO.util.Dom.addClass(question+i, 'hideTrigger');
    }
  }
};

mws.trackBeacon = function(smsStatus) {
  var r=Math.random();
  var img = '<img width="1" height="1" border="0" src="http://pclick.yahoo.com/p/s='+tracking.beacon+'/lng='+tracking.intl+'/rand='+r+'/B='+smsStatus+'/C='+tracking.intl+'/D='+tracking.page+'/E='+tracking.smsurl+'/F='+mws.selectedCountry()+'/G='+mws.smsPhoneNumber+'" />';
  document.getElementById("smstrackingbeacon").innerHTML = img;
};

mws.trackSEMCampaign = function() {
  if (window.ymobpage && ymobpage.service && ymobpage.subnav) {
    if (['mail/android', 'messenger/android'].in_array(ymobpage.service + '/' + ymobpage.subnav)) {
      var img = '<img src="https://s2.srtk.net/www/delivery/ti.php?trackerid=737&cb=245998755&r='+Math.random()+'" width="1" height="1" border="0"/>';
      document.getElementById("smstrackingbeacon").innerHTML = img;
    }
  }
};

mws.trackClick2Sales = function() {
  var img = '';

  if (tracking.intl == 'uk') {
    img = '<img width="1" height="1" border="0" src="http://track.polenord.net/transform_yahoo.php?lead=1&var1='+mws.smsPhoneNumber+'&var2='+tracking.page+'" />';
  } else if (tracking.intl == 'it') {
    img = '<img width="1" height="1" border="0" src="http://track.polenord.net/transform_yahoo_mobile_it.php?lead=1&var1='+mws.smsPhoneNumber+'&var2='+tracking.page+'" />';
  } else if (tracking.intl == 'es') {
    img = '<img width="1" height="1" border="0" src="http://track.polenord.net/transform.php?idc=357&lead=1&var1='+mws.smsPhoneNumber+'&var2='+tracking.page+'" />';
  } else if (tracking.intl == 'de') {
    img = '<img width="1" height="1" border="0" src="http://track.polenord.net/transform_yahoo.php?idc=271&lead=1&var1='+mws.smsPhoneNumber+'&var2='+tracking.page+'" />';
  }

  document.getElementById("smstrackingClick2Sales").innerHTML = img;
};

mws.trackAGOF = function() {
  if (tracking.intl == 'de') {
    var handleSuccess = function(o) {
      document.getElementById("smstrackingAGOF").innerHTML = o.responseText;
    };
    var callbacks = {
      success: handleSuccess,
      failure: function (o) {alert('Submission failed: ' + o.status);}
    };
    var url = '/bin/getAds.mw?type=AGOF&spaceid='+tracking.spaceid;
    YAHOO.util.Connect.asyncRequest('GET', url, callbacks);
  }
};

mws.cleanWSOutput = function(text) {
  return text.replace(/<\!--.+-->/gim, '');
};


