

/**
 * AdvertisementModule
 * inzertni modul, js objekt pro obsluhu
 *
 * @package Modules
 * @subpackage AdvertisementModule
 * @copyright 2008 MITON CZ
 * @author Evzen Eiba <evzen.eiba@miton.cz>
 * @filesource
 */


var AdvertisementModule = Class.create({
   initialize: function(ajaxBaseUrl) {
      this.ajaxBaseUrl = ajaxBaseUrl;
      this.effectDuration = 0.3;
   },

   saveUserFilterForm : function(outputElement, packageId, infoElement, allRegions) {
         mForms.setAjaxPath(this.ajaxBaseUrl);
         mForms.setOutputElementId('popup-content');
         mForms.request('advertisement-module/save-user-filter-form/',null,'saveUserFilterForm',1);
         // var inPagePopup = new InPagePopup();
         // inPagePopup.disableWindow('400','300');
         // var url = this.ajaxBaseUrl + 'advertisement-module/save-user-filter-form/';
         // new Ajax.Updater('popup-content',url,{method:'get'});
   },

   activationInfo: function(contactId) {
         var inPagePopup = new InPagePopup();
         inPagePopup.disableWindow('400','300');
         var url = this.ajaxBaseUrl + 'advertisement-module/activation-info/?contactId='+contactId;
         new Ajax.Updater('popup-content',url,{method:'get'});
   },

   adTopInfo: function(adId) {
         var inPagePopup = new InPagePopup();
         inPagePopup.disableWindow('500','400');
         var opt = {
            method: 'get',
            asynchronous: false,
            parameters: 'adId='+adId
         };
         var url = this.ajaxBaseUrl+'advertisement-module/top-info/'
         new Ajax.Updater('popup-content',url,opt);
   },


   loadSearchFormFieldsAndActivities: function(rubricId,parametersElement) {
      // Effect.SlideUp($(parametersElement), { duration: advertisementModule.effectDuration, queue: 'end' } );
      $(parametersElement).hide();

      if (rubricId!=0) {
         advertisementModule.searchFormLoader(1);
         var opt = {
            method: 'get',
            asynchronous: false,
            parameters: 'rubricId='+rubricId,
            onComplete : function(r) {
               addS = r.responseText;
               addS = addS.replace(/<[\/]?form[^>]*>/,'');
               addS = addS.replace(/<[\/]?form[^>]*>/,'');
               $(parametersElement).update(addS);
               // Effect.SlideDown($(parametersElement));
               // Effect.SlideDown($(parametersElement), { duration: advertisementModule.effectDuration, queue: 'end' } );
               $(parametersElement).show();
               // $(parametersElement).removeClassName('ajax-loading');
               advertisementModule.searchFormLoader(0);
            }

         };
         new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/load-search-form-fields/',opt);
      }
   },
   searchFormLoader: function(show) {
      if (ele = $('searchFormLoader')) {
         if (show) {
            ele.style.width = $('rubricId1').form.getWidth()+'px';
            ele.style.height = $('rubricId1').form.getHeight()+'px';
            ele.show();
         } else {
            ele.hide();
         }
      }
   },

   loadSubRubrics: function(depth, adminMode) {
      if (!adminMode) {
         adminMode = 0;
      }
      // $('rubricId'+(depth+1)).options = Array();
      for(var i=depth+2; i<=3; i++) {
         if ($('rubricId'+i)) {
            // $('rubricId'+i).ancestors()[1].hide();
            if ($('rubricId'+i).ancestors()[1].visible()) {
               // Effect.SlideUp($('rubricId'+i).ancestors()[1], { duration: advertisementModule.effectDuration, queue: 'end' } );
               $('rubricId'+i).ancestors()[1].hide();
            }
         }
      }
      // $('activityId').options = Array();
      rubricId = $('rubricId'+depth).value;
      this.searchFormLoader(1);
      if (!finalActivities) {
         var finalActivities = 0;
      }

      var opt = {
         method: 'get',
         asynchronous: false,
         parameters: 'rubricId='+rubricId+'&adminMode='+adminMode,
         onComplete : function(r) {
            advertisementModule.searchFormLoader(0);
            if ($('rubricId'+(depth+1))) {
               while ($('rubricId'+(depth+1)).options.length>0) {
                  $('rubricId'+(depth+1)).remove(0);
               }
               rubrics = r.responseText.evalJSON().rubrics;
               rubrics.each(function(rubric) {
                  var option = new Option(rubric.text,rubric.id);
                  $('rubricId'+(depth+1)).options.add(option,$('rubricId'+(depth+1)).options.length);
               });
               // alert($('rubricId'+(depth+1)).options.length);
               if (1>=$('rubricId'+(depth+1)).options.length) {
                  // $('rubricId'+(depth+1)).ancestors()[1].hide();
                  if ($('rubricId'+(depth+1)).ancestors()[1].visible()) {
                     // Effect.SlideUp($('rubricId'+(depth+1)).ancestors()[1], { duration: advertisementModule.effectDuration, queue: 'end' } );
                     $('rubricId'+(depth+1)).ancestors()[1].hide();
                  }
               } else {
                  // $('rubricId'+(depth+1)).ancestors()[1].show();
                  // Effect.SlideDown($('rubricId'+(depth+1)).ancestors()[1], { duration: advertisementModule.effectDuration, queue: 'end' } );
                  $('rubricId'+(depth+1)).ancestors()[1].show();
               }
            }

            activities = r.responseText.evalJSON().activities;
            pricesArray = new Array();

            while ($('activityId').options.length>0) {
               $('activityId').remove(0);
            }
            activities.each(function(activity) {
               var option = new Option(activity.text,activity.id);
               $('activityId').options.add(option); // 
               pricesArray[activity.id] = activity;
            });
            // advertisementModule.loadSearchFormFields($$('rubricId'+(depth+1)).value,parametersElement);
         }
      };
      new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/load-rubrics/',opt);
   },
   loadRubricsToSelect: function(selectElement,mainRubricId,parametersElement) {
      // $(selectElement).options = Array();
      while ($(selectElement).options.length>0) {
         $(selectElement).remove(0);
      }
      
      var opt = {
         method: 'get',
         asynchronous: 'false',
         parameters: 'mainRubricId='+mainRubricId,
         onComplete : function(r) {
            rubrics = r.responseText.evalJSON().rubrics;
            rubrics.each(function(rubric) {
               var option = new Option(rubric.text,rubric.id);
               $(selectElement).options.add(option,1);
            });
            advertisementModule.loadSearchFormFields($(selectElement).value,parametersElement);
         }
      };
      new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/load-rubrics/',opt);
   },

   swapUserPanel: function(id) {
      $$('.blockuserpanel-block').each(function (ele) { ele.hide(); } );
      $('userpanel-tabs').childElements().each(function (ele) { ele.removeClassName('active'); });
      $('userpanel-'+id).show();
      $('userpanel-tab'+id).addClassName('active');
      var opt = {
         method: 'post',
         asynchronous: 'true',
         postBody: 'do[swapUserPanel]='+id

      };
      new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/ajax-small-requests/',opt);
   },
   loadAdFormFieldsAndActivities: function(rubricId,parametersElement, admin) {
      // Effect.SlideUp($(parametersElement), { duration: advertisementModule.effectDuration, queue: 'end' } );
      if (!admin) {
         admin = 0;
      }

      if (rubricId!=0) {
         advertisementModule.searchFormLoader(1);
         var opt = {
            method: 'get',
            asynchronous: false,
            parameters: 'rubricId='+rubricId + '&admin='+admin,
            onComplete : function(r) {
               addS = r.responseText;
               addS = addS.replace(/<[\/]?form[^>]*>/,'');
               addS = addS.replace(/<[\/]?form[^>]*>/,'');
               $(parametersElement).update(addS);
               // alert(addS);
               // alert(parametersElement);
               // Effect.SlideDown($(parametersElement));
               // Effect.SlideDown($(parametersElement), { duration: advertisementModule.effectDuration, queue: 'end' } );
               $(parametersElement).show();
               // $(parametersElement).removeClassName('ajax-loading');
               advertisementModule.searchFormLoader(0);
            }

         };
         new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/load-ad-form-fields/',opt);
      }
   },
   checkInsertString: function(text,updateElementId) {
      if (text.length>0) { // doplnit kontrolu tvaru
         var opt = {
            method: 'get',
            asynchronous: false,
            parameters: 'do[checkInsertString]='+text,
            onComplete : function(r) {
               // alert('x');
               $(updateElementId).update(r.responseText);
            }
         };
         new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/ajax-small-requests/',opt);
      }
   },

   parseInsertString: function(string,onCompleteFunction) {
      // $(selectElement).options = Array();
      var opt = {
         method: 'get',
         asynchronous: 'false',
         parameters: 'do[parseInsertString]='+string,
         onComplete : function(r) {
            onCompleteFunction(r.responseText);
         }
      };
      return new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/ajax-small-requests/',opt);
   },


   addToClipboard: function(adId,updateElementId) {
      if (adId>0) { // doplnit kontrolu tvaru
         var opt = {
            method: 'get',
            asynchronous: false,
            parameters: 'adId='+adId,
            onComplete : function(r) {
               // alert('x');
               $(updateElementId).update(r.responseText);
            }
         };
         new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/add-to-clipboard/',opt);
      }
   },
   adSendByEmail : function(id) {
         mForms.setAjaxPath(this.ajaxBaseUrl);
         mForms.setOutputElementId('popup-content');
         mForms.request('advertisement-module/send-by-mail-form/?adId='+id,null,'sendByMailForm',1,false,520);
         // var inPagePopup = new InPagePopup();
         // inPagePopup.disableWindow('400','300');
         // var url = this.ajaxBaseUrl + 'advertisement-module/save-user-filter-form/';
         // new Ajax.Updater('popup-content',url,{method:'get'});
   },

   loadRubricLayouts: function(rubricId,selectElement) {
      // $(selectElement).options = Array();
      var opt = {
         method: 'get',
         asynchronous: 'false',
         parameters: 'do[loadRubricLayouts]='+rubricId,
         onComplete : function(r) {
            layouts = r.responseText.evalJSON().layouts;

            while ($(selectElement).options.length>0) {
               $(selectElement).remove(0);
            }
            layouts.each(function(pair) {
               var option = new Option(pair.layoutId + ' ' + pair.name,pair.id);
               $(selectElement).options.add(option,$(selectElement).options.length);
            });
            if (selectElement.onchange) {
               selectElement.onchange();
            }
         }
      };
      return new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/ajax-small-requests/',opt);
   },
   
   checkContact: function(value) {
      // $(selectElement).options = Array();
      var opt = {
         method: 'get',
         asynchronous: 'false',
         parameters: 'do[checkContact]='+value,
         onComplete : function(r) {
            ret = r.responseText.evalJSON();
            if (ret.notice) {
               alert(ret.notice);
            }
            return ret;
         }
      };
      return new Ajax.Request(this.ajaxBaseUrl+'advertisement-module/ajax-small-requests/',opt);
   },

   setPrices: function(jsonValues) {
      if (this.pricesArray = jsonValues.evalJSON().prices) {
         return true;
         
      }
      return false;
   },

   setLayoutPrices: function(jsonValues) {
      if (this.layoutPricesArray = jsonValues.evalJSON().prices) {
         return true;
         
      }
      return false;
   },

   setVat: function(vat) {
      if (this.vat = new Number(vat)) {
         return true;
      }
      return false;
   },

   countAdPrice: function(totalTextLength, rubricId, activityId, layoutId, pressKind, pressRepeatCount, overLimitPressFree, overLimitWebFree, admin) {
      if (undefined == this.pricesArray || undefined == this.pricesArray[rubricId] || undefined == this.pricesArray[rubricId][activityId]) {
         return -1;
      }
      if (!this.pricesArray) {
         return -1;
      }

      if (undefined == admin || !admin) {
         admin = false;
      }

      // alert('countprice');
      
      totalTextLength = new Number(totalTextLength);
      rubricId = new Number(rubricId);
      activityId = new Number(activityId);
      layoutId = new Number(layoutId);
      pressKind = new Number(pressKind);
      // beztisku pressRepeatCount = new Number(pressRepeatCount);
      // overLimitPressFree = new Number(overLimitPressFree);
      // overLimitWebFree = new Number(overLimitWebFree);
      // alert(activityId);
      
      priceData = this.pricesArray[rubricId][activityId];

      advertisementType = priceData.advertisementType;

      // do komercni nejde podat inzerat zdarma do tisku
      if (1 == pressKind && ('commercial' == advertisementType || 'paidPublic' == advertisementType)) {
         pressKind = 2;
      }


      if (this.layoutPricesArray[layoutId] && pressKind==2) {
         layoutPriceCzk = new Number(this.layoutPricesArray[layoutId]);
      } else {
         layoutPriceCzk = 0;
      }

      webPriceCzk = 0;

      if (pressKind < 2) {
         // web/tisk zdarma
         rowPriceCzk = 0;
         fixPriceCzk = 0;
      }
      else if (pressKind==2)  {
         // placeny tisk
         rowPriceCzk = new Number(priceData.rowPriceCzk);
         fixPriceCzk = new Number(priceData.fixPriceCzk);
      }

      if (0!=overLimitWebFree || 0!=overLimitPressFree) { // jsem nad limit
         if (0 == pressKind) {
            rowPriceCzk = 0;
            fixPriceCzk = 0;
            if (0!=overLimitWebFree) {
               webPriceCzk = new Number(priceData.overLimitWebFreePriceCzk);
            }
         } else {
            rowPriceCzk = new Number(priceData.rowPriceCzk);
            fixPriceCzk = new Number(priceData.overLimitPressFreePriceCzk);
         }
      }


      price = 0;
      var discount = 1;
      vat = 1;

      /* beztisku 
      if ('commercial' == advertisementType) {
         if (pressRepeatCount>=4) { discount = 0.85; }
         if (pressRepeatCount>=11) { discount = 0.8; }
         if (pressRepeatCount>=26) { discount = 0.75; }
         if (pressRepeatCount>=50) { discount = 0.7; }
         vat = this.vat;
      } */

      discount = 1; // beztisku 

      if ('free' == advertisementType && !overLimitWebFree && !overLimitPressFree && !admin) {
         paidIssues = pressRepeatCount - 1;
      } else {
         paidIssues = pressRepeatCount;
      }

      price += Math.round(
            vat * webPriceCzk
            + (
               vat
               * discount
               * (
                  // beztisku (paidIssues * (Math.floor(totalTextLength/30)+1) * rowPriceCzk)
                  // beztisku+ (paidIssues * fixPriceCzk)
                  // beztiku + (pressRepeatCount * layoutPriceCzk)
                  + fixPriceCzk
                  + (layoutPriceCzk)
                  )
            )
         );      
      
      // alert(price);
      return price;
   }

});

