HANZO = {};
HANZO.cdweb = function () {
   var provider = "1340";
   //var cycleIp = '200.155.11.162';
   
   var cycleHost = 'http://www.propmark.com.br/cannes2009/sms/';
   //var cycleHost = 'http://cannes2008.propmark.com.br/sms/';
   //var cycleHost = 'http://'+cycleIp+'/hanzo/';
   //var cycleHost='http://asp.demo.dev.hanzo.com.br/vivo_files/'
   
   var mediaHost = 'http://www.propmark.com.br/cannes2009/sms/';
   //var mediaHost = 'http://cannes2008.propmark.com.br/sms/';
   //var mediaHost = 'http://cdweb-html.dev.hanzo.com.br/EditoraReferencia/PROPMARK/';
   
   var cdweb_action = 'http://cdweb.hanzo.com.br/cdweb/subscribeRedirectChannel.do';
   //var cdweb_action = 'http://cdweb.stg.hanzo.com.br/cdweb/subscribeRedirectChannel.do';
   
   var vivo_proxy = 'http://200.155.11.162/hanzo/cdweb_proxy.asp';
   //var vivo_proxy='http://asp.demo.dev.hanzo.com.br/cdweb_proxy_stg.asp'
      
   var subscribePage = "subscribe.html";
   var successPage = "success.html"
   var errorPage = "error.html"
   var sendTokenPage = "index.html";
   
   var vivoPage = "vivo_propmark.html";
   var vivoToken = cycleHost + vivoPage;
   var sendToken = mediaHost + sendTokenPage;
   var subscribe = mediaHost + subscribePage;
   var success = mediaHost + successPage;
   var error = mediaHost + errorPage;
   var result = '_self';
   var validateForm;
   var page;

   // Messages
   var NO_MOBILE = "Por favor preencha o número do seu celular com o código de área";
   var ONLY_NUMBERS = "O campo celular só pode conter números!";
   var NO_CHANNEL = "Você deve escolher um canal para assinar.";
   var NO_CARRIER = "Por favor, escolha uma operadora."

   function addOption(el, pair) {
      var op = document.createElement('option');
      op.value = pair[0];
      op.text = pair[1];
      try{
         el.add(op, null);//W3C
      }catch(e){
         el.add(op);//IE only
      }
   }

   function isVivo() {
      return page === vivoToken;
   }

   function addHidden(el, pair) {
      var ipt;
        try {// Hack due to IE's bad DOM implementation
          ipt = document.createElement("<input name="+pair[1]+">");
        } catch (e) { }
        if (!ipt || !ipt.name) { // Not in IE, then... Standards
          ipt = document.createElement('input')
          ipt.name = pair[1];
        }
      ipt.type = 'hidden';
      ipt.value = pair[0];
      el.appendChild(ipt);
   }

   function renderForm(hanzo_form) {
      var carrier = hanzo_form.carrier;
      addHidden(hanzo_form, ["939", "channelId"]);
      addOption(carrier, [0, "Sua operadora"]);
      addOption(carrier, [1007, "Amazônia Celular"]);
      addOption(carrier, [1006, "Brasil Telecom"]);
	    addOption(carrier, [1010, "Claro"]);
      addOption(carrier, [1002, "CTBC"]);
      addOption(carrier, [1001, "Oi"]);
	    addOption(carrier, [1009, "Sercomtel"]);
      addOption(carrier, [1007, "Telemig"]);
      //addOption(carrier, [1005, "Tim"]);
      isVivo()?addOption(carrier, [1004, "Vivo"]) : addOption(carrier, [9999, "Vivo"]);
   }

   function populateFields(hanzo_form,service,provider,action,sendToken,subscribe,success,error,form_action,form_target){
      hanzo_form.action = form_action;
      hanzo_form.target = form_target;
      hanzo_form.onSubmit = "return false";
      hanzo_form.method = "post";

      addHidden(hanzo_form, ["true", "sendDisabled"]);
      addHidden(hanzo_form, [service, "serviceId"]);
      addHidden(hanzo_form, [provider, "providerId"]);
      addHidden(hanzo_form, [action, "action"]);
      addHidden(hanzo_form, [sendToken, "sendTokenURL"]);
      addHidden(hanzo_form, [subscribe, "subscribeURL"]);
      addHidden(hanzo_form, [success, "successURL"]);
      addHidden(hanzo_form, [error, "errorURL"]);
      if (hanzo_form.mobileDefault === undefined) {
         addHidden(hanzo_form, ["ex:2100000001", "mobileDefault"]);
      }
   }

   function validateChannelForm(hanzo_form) {
      var hanzo_val = hanzo_form.mobile.value;
      if (hanzo_val.charAt(0) === '0'){
         hanzo_form.mobile.value = hanzo_val = hanzo_val.substring(1, 11);
      }
      if (hanzo_val === null || hanzo_val.length !== 10) {
         HANZO.cdweb.displayMessage(NO_MOBILE);
         hanzo_form.mobile.focus();
         return false;
      }
      if (!isInteger(hanzo_val)) {
         HANZO.cdweb.displayMessage(ONLY_NUMBERS);
         hanzo_form.mobile.focus();
         return false;
      }
      if (hanzo_form.channelId.value === '0') {
         HANZO.cdweb.displayMessage(NO_CHANNEL);
         return false;
      }
      return true;
   }

   function validateTokenForm(hanzo_form) {
      var val = hanzo_form.token.value;
      if (val === null || val === "" || val.length !== 5) {
            alert("Por favor preencha o campo senha");
            hanzo_form.token.focus();
         return false;
      }
   return true;
   }

   function populateHanzoForm(hanzo_form, hanzo_type) {
      switch(hanzo_type) {
         case 1: renderForm(hanzo_form); populateFields(hanzo_form,"1",provider,"1",sendToken,subscribe,success,error,cdweb_action,result); break;
         case 2: populateFields(hanzo_form,"1",provider,"2","","",success,error,cdweb_action,result); break;
         case 4: renderForm(hanzo_form); populateFields(hanzo_form,"1",provider,"1",vivoToken,'',success,error,vivo_proxy,"_self"); break;
      }
   }

   function initForm(hanzo_form) {
      hanzo_form.mobile.maxLength = hanzo_form.mobileDefault.value.length;
      hanzo_form.mobile.size = hanzo_form.mobileDefault.value.length;
      hanzo_form.mobile.value = hanzo_form.mobileDefault.value;
      disableFields(hanzo_form, true);
      hanzo_form.carrier.selectedIndex = 0;
   }

   function disableFields(hanzo_form, hanzo_b) {
      hanzo_form.mobile.disabled = hanzo_b;
      hanzo_form.sendDisabled.value = hanzo_b;
   }

   function PageQuery(hanzo_q) {
      if (hanzo_q.length > 1) this.hanzo_q = hanzo_q.substring(1, hanzo_q.length);
      else this.hanzo_q = null;
	  
      this.keyValuePairs = new Array();
      if (hanzo_q) {
         for (var hanzo_i = 0; hanzo_i < this.hanzo_q.split("&").length; hanzo_i++) {
            this.keyValuePairs[hanzo_i] = this.hanzo_q.split("&")[hanzo_i];
         }
      }
      this.getKeyValuePairs = function() { return this.keyValuePairs; }
	  
      this.getValue = function(hanzo_s) {
         for(var hanzo_j = 0; hanzo_j < this.keyValuePairs.length; hanzo_j++) {
            if (this.keyValuePairs[hanzo_j].split("=")[0] == hanzo_s) {
               return this.keyValuePairs[hanzo_j].split("=")[1];
            }
         }
         return false;
      }
	  
      this.getParameters = function() {
         var hanzo_a = new Array(this.getLength());
         for(var hanzo_j = 0; hanzo_j < this.keyValuePairs.length; hanzo_j++) {
            a[hanzo_j] = this.keyValuePairs[hanzo_j].split("=")[0];
         }
         return hanzo_a;
      }

      this.getLength = function() { return this.keyValuePairs.length; }
   }

   function queryString(hanzo_key) {
      var hanzo_page = new PageQuery(window.location.search);
      return unescape(hanzo_page.getValue(hanzo_key));
   }

   function setChannelAction(channelId, hanzo_form) {
      var carrierId = hanzo_form.carrierId.value;
      var vivoDiv = document.getElementById("mobile_vivo");
      if (carrierId === '9999') {
         carrierId = '1004';
         vivoDiv.src = vivoToken + '?c=' + channelId + '&o=' + carrierId;
      }
   }

   function setCarrierAction(carrierId, hanzo_form) {
      var vivoDiv = document.getElementById("mobile_vivo");
      var allDiv = document.getElementById("mobile_all");
      var channelId = hanzo_form.channelId.value;
      hanzo_form.mobile.maxLength = 11;
      if (carrierId === '9999') carrierId = '1004';
      if (carrierId === '0') {
         if (hanzo_form.mobile.value === '') {
            hanzo_form.mobile.maxLength = hanzo_form.mobileDefault.value.length;
            hanzo_form.mobile.size = hanzo_form.mobileDefault.value.length;
            hanzo_form.mobile.value = hanzo_form.mobileDefault.value;
         }
         disableFields(hanzo_form, true);
      }  else if (carrierId === '1004') {
         if (isVivo()) {
            disableFields(hanzo_form, false);
            if (hanzo_form.mobile.value === hanzo_form.mobileDefault.value) {
               hanzo_form.mobile.value = "";
               hanzo_form.mobile.maxlength = 11;
            }
         hanzo_form.mobile.focus();
         } else {
            window.location = vivoToken + '?c=' + channelId + '&o=' + carrierId + '&m=' + hanzo_form.mobile.value;
         }
      } else {
         if (isVivo()) {
            window.location = sendToken + '?o=' + carrierId + '&m=' + hanzo_form.mobile.value;
         } else {
            if (vivoDiv.style.display === "block") {
               allDiv.style.display = "block";
               vivoDiv.style.display = "none";
            }
            disableFields(hanzo_form, false);
            if (hanzo_form.mobile.value === hanzo_form.mobileDefault.value) {
               hanzo_form.mobile.value = "";
               hanzo_form.mobile.maxlength = 11;
            }
            hanzo_form.mobile.focus();
         }
      }
   }

   //Validating functions
   
   function isDigit(hanzo_num) {
      if (hanzo_num.length > 1) {
         return false;
      }
      var string = "1234567890";
      if (string.indexOf(hanzo_num) !== -1) {
         return true;
      }
      return false;
   }

   function isInteger(hanzo_val) {
      for(var hanzo_i=0; hanzo_i<hanzo_val.length; hanzo_i++) {
         if (!isDigit(hanzo_val.charAt(hanzo_i))) { return false; }
      }
      return true;
   }

   function getCarrierFromURL() {
      var parameter = queryString('o');
      if (parameter === 'false') {
         parameter = '0';
      }
      return parameter;
   }

   function getChannelFromURL() {
      var parameter = queryString('c');
      if (parameter === 'false') {
         parameter = '0';
      }
      return parameter;
   }

   function getMobileFromURL() {
      var parameter = queryString('m');
      if (parameter === 'false' || parameter === hanzo_form.mobileDefault.value) {
         parameter = hanzo_form.mobileDefault.value;
      }
      return parameter;
   }
   
   return {
      sendForm: function (hanzo_form) {
         if (hanzo_form.sendDisabled.value === 'false') {
            if (validateForm(hanzo_form)) {
               hanzo_form.submit();
            }
         } else {
            this.displayMessage(NO_CARRIER);
         }
      },

      setCarrierAction: setCarrierAction,//exposing the function
      setChannelAction: setChannelAction,//exposing the function
      
      displayAction: function (formName) {
         page = window.location.href.split("?")[0];
         if (formName) {
            hanzo_form = document.getElementById(formName);
         }
         if (this.displayMessage === undefined) {//just set the way the messages are going to be shown
            this.displayMessage = function (txt) { alert(txt) };
         }
         if (page === sendToken || page === mediaHost) {
            populateHanzoForm(hanzo_form, 1);
            initForm(hanzo_form);
            hanzo_form.mobile.value = getMobileFromURL();
            validateForm = validateChannelForm;
         } else if (page === vivoToken) {
            populateHanzoForm(hanzo_form, 4);
            initForm(hanzo_form);
            hanzo_form.channelId.value = getChannelFromURL();
            hanzo_form.mobile.value = getMobileFromURL();
            hanzo_form.carrierId.value = getCarrierFromURL();
            setCarrierAction(hanzo_form.carrierId.value, hanzo_form);
            validateForm = validateChannelForm;
         } else if (page === subscribe) {
            populateHanzoForm(hanzo_form, 2);
            hanzo_form.sendDisabled.value = false;
            validateForm = validateTokenForm;
         } else if (page === error) {
            var hanzo_action = queryString('action').replace("-", "");
            try {
               document.getElementById("hanzo_msg" + hanzo_action).style.display = "block";
            } catch(err) {
               document.getElementById("hanzo_msg1000").style.display="block";
            }
         } else if (page === success) {
            var hanzo_channel = queryString('channel');
            if (hanzo_channel != 'false') {
                 if(document.getElementById) {
                     for (var hanzo_i=0; hanzo_i < 10; hanzo_i++)  hanzo_channel = hanzo_channel.replace("+", " ");
               }
               var hanzo_keyword = queryString('keyword');
               if (hanzo_keyword != 'false') {
                  if (document.getElementById) {
                     for (var hanzo_i=0; hanzo_i < 10; hanzo_i++)  hanzo_keyword = hanzo_keyword.replace("+"," ");
                     document.getElementById("labelKeyword").innerHTML = hanzo_keyword;
                     document.getElementById("labelChannel2").innerHTML = hanzo_channel;
                  }
                  document.getElementById("hanzo_msg2").style.display = "block";
               } else {
                  document.getElementById("labelChannel1").innerHTML = hanzo_channel;
                  document.getElementById("hanzo_msg1").style.display = "block";
               }
            }
            var hanzo_opt = queryString('opt');
            if (hanzo_opt !== 'false') {
               document.getElementById("hanzo_msg3").style.display = "block";
               document.getElementById("hanzo_msg4").style.display = "block";
            } else {
               document.getElementById("hanzo_msg5").style.display = "block";
            }
         }
      }
   };
} ();

