
//variables globales
var url_collector = "http://contents.debbiescaribbeanresortreviews.com/reviews_collector_service/show_form/"; 
var url_delivery  = "http://contents.debbiescaribbeanresortreviews.com/reviews_delivering_service/get_reviews_list/";
var url_images  = "http://contents.debbiescaribbeanresortreviews.com/images/";

//obtiene las  dimensiones de un elemento del dom
// var dims = new ElementDimensions(elementToMeasure);
function ElementDimensions(elem)
{
    this.inner = {    //content and padding; retorna 0 para elemntos inline (se puede usar scrollWidth/Height si no es inline el elemento)
        width: elem.clientWidth,
        height: elem.clientHeight
    };
    this.outer = {    //para todo tipo de elemento (content, padding, scrollbar, border)
        width: elem.offsetWidth,
        height: elem.offsetHeight
    };
    this.scroll = {
        //width & height para todo el contenido (including padding), visible o no
        //en Opera no funciona; no incluye padding
        width: elem.scrollWidth,        
        height: elem.scrollHeight<elem.clientHeight ? elem.clientHeight : elem.scrollHeight,
        
        //scroll position del content & padding
        left: elem.scrollLeft,
        top: elem.scrollTop
    };    
    //position del elemento desde el top-left del document
    var tmp = elem;
    this.left = this.top = 0;
    while(tmp.offsetParent)
    {
        this.left += tmp.offsetLeft;
        this.top += tmp.offsetTop;
        tmp = tmp.offsetParent;
    }
}

//funcion que procesa el callback del json
function json_process(item_id,options,style_data,DOM_id,data){       
    set_style(DOM_id,style_data);              
    var result_html = document.getElementById(DOM_id);    
    result_html.innerHTML = data.html;         
    var currentHref = window.location.href;    
    
    if(options.review_id==-1){      
       window.location.href = currentHref;
    }    
    if(options.review_id!="-1" && options.review_id!=""){
        window.location.href = currentHref.substr(0, currentHref.lastIndexOf("#")) + "#rev_"+options.review_id;    
     }        
    if(delivery_options &&  document.getElementById("list_title")){
          if (typeof delivery_options.list_title != 'undefined' && delivery_options.list_title != '' ){              
              document.getElementById("list_title").innerHTML = delivery_options.list_title;
          }else{
              document.getElementById("list_title").innerHTML = "";
          }                
    }    
    var el =  document.getElementById('el_ovrly_ly_ldng');
    dims = new ElementDimensions(el)
    
    //seteando las dimensiones del div loading    
    document.getElementById('ovrly_ly_ldng').style.width = dims.outer.width+'px';   
    document.getElementById('ovrly_ly_ldng').style.height = dims.outer.height+'px';  
    var top_ = dims.top + 6;// el 6 es el padding que tiene el div contenedor del CD 
    //document.getElementById('ovrly_ly_ldng').style.top = top_+'px';   
    
    if (loading_gif = document.getElementById("msg_loading")) 
    {        
        document.getElementById('ovrly_ly_ldng').style.display = 'none';        
    }       
    //monitoreo de futuros eventos
    monitoring_ajax(item_id,DOM_id,options);                                                                    
    link_collector_review(item_id,"",options);                           
}


//funcion para setear estilos
function set_style(DOM_id,style_data){                
      //valores por defecto 
      var color_1 = "#2992d1"; 
      var color_2 = "#229922";
      var color_3 = "#616161";
      
      var color_4 = "#064d93"; 
      var color_5 = "#e73816";
      var color_6 = "#dceebc";
                 
      //valores costumizados
      if(style_data.color_01 != ""){ color_1 = style_data.color_01 }      
      if(style_data.color_02 != ""){ color_2 = style_data.color_02 }
      if(style_data.color_03 != ""){ color_3 = style_data.color_03 }
      if(style_data.color_04 != ""){ color_4 = style_data.color_04 }      
      if(style_data.color_05 != ""){ color_5 = style_data.color_05 }
      if(style_data.color_06 != ""){ color_6 = style_data.color_06 }
          
      var sheet = document.createElement('style');       
      sheet.setAttribute("type", "text/css");
     var css_rules = "#"+DOM_id+"{font-size:12px;text-align:left;filter}"+" #"+DOM_id+ " .txt_blue11_bold{color:"+color_2+";font-size:12px;font-weight:bold;}"+" #"+DOM_id+ " .txt_green18{color:"+color_2+";font-size:12px;font-weight:bold;}"+" #"+DOM_id+" a.send_review_link{color:"+color_5+";font-size:12px;font-weight:bold;}"+" #"+DOM_id+"  a.send_review_link{text-decoration:underline;}"+" #"+DOM_id+"  a.send_review_link:hover{text-decoration:none;}"+" #"+DOM_id+" a.red_link_11{color:"+color_4+";font-size:12px;font-weight:bold;text-decoration:underline;}"+" #"+DOM_id+"  a.red_link_11:hover{text-decoration:none;}"+" #"+DOM_id+" .txt_hotel_reviews {vertical-align:top;}"+" #"+DOM_id+" .txt_hotel_reviews_bold {vertical-align:middle;font-weight:bold;}"+" #"+DOM_id+" .txt_blue11, .txt_blue11 a:link, .pagination_links, .pagination_links a:active, .pagination_links a:link, .pagination_links a:visited {color:"+color_4+";font-size:12px;font-weight:bold;}"+" #"+DOM_id+"  .pagination_links a:hover{text-decoration:none;}"+" #"+DOM_id+"  .pagination_links a{text-decoration:underline;}"+" #"+DOM_id+" .txt_gray12_bold {color:"+color_3+";font-size:12px;font-weight:bold;}"+" #"+DOM_id+" .review_img{border:medium none;}"+" #"+DOM_id+" .header_color1 {color:"+color_1+";}"+" #"+DOM_id+" .header_color2 {color:"+color_3+";}"+" #"+DOM_id+" .header_color3 {color:"+color_2+";}"+" #"+DOM_id+" h1{font-size:25px;font-weight:bold;margin:0;padding:0px;}"+" #"+DOM_id+" h2{font-size:20px;font-weight:bold;margin:0;padding:0px;}"+" #"+DOM_id+" h3{font-size:12px;font-weight:bold;margin:0;padding:0px;}"+" #"+DOM_id+" .txt_red18{color:"+color_2+";font-size:18px;}"+" #"+DOM_id+" a.sort_by{color:"+color_4+";font-size:12px;font-weight:bold;text-decoration:none;}"+" #"+DOM_id+" a.sort_by:hover{text-decoration:underline;}"+" #"+DOM_id+" a.user_link{color:"+color_2+";font-size:12px;font-weight:bold;text-decoration:underline}"+" #"+DOM_id+" a.user_link:hover{text-decoration:none}"+" #"+DOM_id+" .reviews_content{text-align:left;}"+" #"+DOM_id+" .sort_controls_reviews_navigator {width:50%;}"+" #"+DOM_id+" .header_items{padding-left: 18px;padding-bottom:10px;color: white;font-size:18px;font-weight:bold;margin:0}"+" #"+DOM_id+" .parent_content{background-color:#FCF6DB;}"+" #"+DOM_id+" .total_reviews_gray{color:"+color_3+";font-size:11px;font-weight:bold;}"+" #"+DOM_id+" .txt_green_12 {color:"+color_3+";font-size:12px;}"+" #"+DOM_id+" .float_msg{z-index: 10;position:absolute;font-size:14px;border:1px solid "+color_4+";background-color:#ffffff;color: black;font-weight:bold;padding:5px;}"+" #"+DOM_id+" .separator_line{background-color:"+color_6+";}"+" #"+DOM_id+" .txt_hotel_reviews_bold, .txt_hotel_reviews, .txt_red11_bold{color:"+color_3+";font-size:12px;}"+" #"+DOM_id+" .dis_cd{position:absolute; background-color:white;filter: alpha(opacity=80);-khtml-opacity: 0.8;-moz-opacity: 0.8;  opacity: 0.8;";
     
      document.getElementsByTagName('head')[0].appendChild(sheet);          
      if (sheet.styleSheet) {
          //ff
          sheet.styleSheet.cssText = css_rules;
      } else {
          //ie
          sheet.appendChild(document.createTextNode(css_rules));
      } 
}

//funcion para manejar los elementos por las clases
function getElementsByClassName(clsName) {
    var i, matches=new Array();
    var els=document.getElementsByTagName('*');
    for(i=0; i<els.length; i++) {
        if(els.item(i).className==clsName) {
            matches.push(els.item(i));
        }
    }
    return matches;
}

//funcion para abrir popup
function show_popup(url){
    var url_ = url; 
    var popup = window.open(url_,'reviews','toolbar=no,scrollbars=yes,location=no,statusbar=no,menubar=no,resizable=no,width=1024,height=800');        
    return false;
} 
//funcion para llamadas recursivas
function call_back(element,_item_id,_DOM_id,_options,_action){
    var options = _options;         
    var action = _action;
    var url = element.href;     
    options.load_time=1;      
    // cuando la accion es paginacion
    if(action == 'pagination'){         
         var url_pieces = url.split("/");        
         var segment_new = url_pieces.pop();
        if (segment_new != ""){
         //modifico el segment 
            options.segment =  parseInt(segment_new);              
        }else{            
            options.segment = 0;
        }        
        var msg_loading = document.getElementById("msg_loading");          
        var msg_loading_1 = document.getElementById( 'ovrly_ly_ldng');          
        msg_loading.style.display = '';    
        msg_loading_1.style.display = '';    
    }            
    // cuando la accion es ordenar
    if(action=='sort'){
        var url_pieces = url.split("#");   
        var criteria = url_pieces.pop();     
        if((options.show_sort == "") || (options.show_sort=="DESC")){
            options.show_sort = "ASC";
        }else{
            options.show_sort = "DESC";
        }
        options.order = criteria;
        
        var msg_loading = document.getElementById("msg_loading");          
        var msg_loading_1 = document.getElementById( 'ovrly_ly_ldng');          
        msg_loading.style.display = '';        
        msg_loading_1.style.display = '';        
    }
    //cuando la accion es mostra u ocultar contenido
    if(action == 'show_more_less'){
         var url_pieces = url.split("#");   
         var show = url_pieces.pop();     
         var url_data = show.split("_");
         var review_id = url_data[0];
         var action_to_do = url_data[1];
        
         var msg_show_more_less = document.getElementById("msg_"+review_id);          
         var msg_show_more_less_1 = document.getElementById( 'ovrly_ly_ldng');                
         msg_show_more_less.style.display = '';
         msg_show_more_less_1.style.display = '';
         
         if( action_to_do == 'showmore'){
            options.review_id =  review_id;                           
         }else{
             options.review_id =-1;
         }
    }    
    //cargo los nuevos reviews
    include_delivering_reviews(_item_id,_DOM_id,options);
    //delivery_reviews_reload.make(_item_id,_DOM_id,options);
    return false;
}             
 
function monitoring_ajax(_item_id,_DOM_id,_options){  
   //links de paginacion 
   var link_up_object = document.getElementById("pagination_links_up");   
   if ( link_up_object ){
           var  link_up_elements = document.getElementById("pagination_links_up").getElementsByTagName("a");   
           for (var i = 0; i < link_up_elements.length; i++){
                var link_up = link_up_elements[i];
                 link_up.onclick = function(){
                     call_back(this,_item_id,_DOM_id,_options,'pagination');  
                     return false;                 
                 };  
           } 
   } 
   
   var link_down_object = document.getElementById("pagination_links_down"); 
   if ( link_down_object ){
       var  link_down_elements = document.getElementById("pagination_links_down").getElementsByTagName("a");
       for (var i = 0; i < link_down_elements.length; i++){
            var link_down = link_down_elements[i];
             link_down.onclick = function(){
                 call_back(this,_item_id,_DOM_id,_options,'pagination');  
                 return false;                 
             };  
       }
   }
   //links de sort
   var link_sort_date = document.getElementById("sort_date");
   if(link_sort_date){
        link_sort_date.onclick = function(){
            call_back(this,_item_id,_DOM_id,_options,'sort');  
            return false;                 
        };    
   }      
   var link_sort_rate = document.getElementById("sort_rate");
   if(link_sort_rate){
       link_sort_rate.onclick = function(){
            call_back(this,_item_id,_DOM_id,_options,'sort');  
            return false;                 
       };  
   }
   //link show more y show less
   var link_more_less = getElementsByClassName('red_link_11');
   for (var i = 0; i < link_more_less.length; i++){
       var link_ = link_more_less[i];
       link_.onclick = function(){
            call_back(this,_item_id,_DOM_id,_options,'show_more_less');  
            return false;                 
       };
   }      
} 

function link_collector_review(_item_id,_DOM_collector_id,_options){    
    var collector_content={
        item_id: "",   
        DOM_collector_id:"none",     
        base_collector_service_url:url_collector,    
        options:{
          element_types_list:"",
          country:"",
          element_id:"-1"  
        },
        init:function(item_id,DOM_collector_id,options){        
             if (typeof DOM_collector_id != 'undefined' && DOM_collector_id!="") {this.DOM_collector_id = DOM_collector_id;}      
                this.item_id = item_id;this.options = options; 
                           
        },
        collector_review :function(DOM_collector_id,options){
            var elements = "";
            var id ="-1";            
             if(options.element_types_list!=""){
                    elements = options.element_types_list.join(":");    
             }
             if(options.element_id!=""){
                 id = options.element_id;
             }    
             var sales_channel_url = document.domain;                  
             //link add_review
             var url = this.base_collector_service_url+this.item_id+'/'+id+'/'+elements+'/'+sales_channel_url+'/'+options.country;
             var link_add_review = getElementsByClassName('send_review_link');                         
             for (var i = 0; i < link_add_review.length; i++){               
                   var link_add = link_add_review[i];
                   link_add.onclick = function(){                                              
                        show_popup(url);  
                        return false;                     
                   };
             }  
             //links independientes
             if(this.DOM_collector_id!="none"){                
                 var other_link =  document.getElementById(this.DOM_collector_id); 
                 other_link.onclick = function(){                                              
                        show_popup(url);  
                        return false;                                          
                 };                            
             }                          
        },   
        make:function(DOM_collector_id,options){            
            this.collector_review(DOM_collector_id,options);
        }
    }    
    collector_content.init(_item_id,_DOM_collector_id,_options);
    collector_content.make(_DOM_collector_id,_options);  
}

function include_delivering_reviews (_item_id,_DOM_id,_options){
    if (loading_gif = document.getElementById("msg_loading")) 
    {
    }
    else {       
        document.getElementById(_DOM_id).innerHTML = '<table width="100%"><tr><td align="center"><img src="' + url_images + 'loading.gif" align="absmiddle" /></td></tr></table>'; 
    }
    
    var delivery_content={
        item_id: "-1",
        DOM_id: "", 
        base_delivery_service_url:url_delivery,    
        collector_options:{
            element_types_list : "",
            element_id : "-1",        
            country : ""            
        },                
        options : {
            element_types_list : "",
            element_id : "-1",   
            review_id: "-1",     
            country : "",
            destination : "-1",        
            initial_date: "",
            final_date: "",
            per_page:"-1",        
            segment:0,                        
            order:"date",
            size:"-1",            
            brand_interval:10,
            show_header:"false",
            show_filter:"false",
            show_sort:"false",
            show_summary:"false",
            list_title:"",
            formated: "false",
            load_time:0,
            chain:"-1"
        },
        common_jsonpRequest:function(url) {
            var element_to_delete =document.getElementById("json_added");
            if(element_to_delete){
                var parent_el = element_to_delete.parentNode;
                // Eliminamos el hijo (el) del elemento padre
                parent_el.removeChild(element_to_delete);    
            }
            
             var JSONPscript = document.createElement("script");   
             var rand_num = Math.ceil(Math.random()*100)           
             JSONPscript.setAttribute("src", url + "&C_b=" +rand_num);
             JSONPscript.setAttribute("type","text/javascript");   
             JSONPscript.setAttribute("id",'json_added')          
             document.body.appendChild(JSONPscript);             
        },
        get_review_list:function(item_id,DOM_id,options){   
            var elements = this.options.element_types_list.join(":");                                                  
            var get_var  = true;                                   
            var method   = 'GET'; 
            var sales_channel_url = 'http://'+document.domain;            
            var query_string = "i_id="+this.item_id+"&d="+this.options.destination+"&e_l="+elements+"&e_id="+this.options.element_id+"&c="+this.options.country+"&i_d="+this.options.initial_date+"&f_d="+this.options.final_date+"&p_p="+this.options.per_page+"&se="+this.options.segment+"&o="+this.options.order+"&si="+this.options.size+"&b_i="+this.options.brand_interval+"&s_h="+this.options.show_header+"&s_f="+this.options.show_filter+"&s_so="+this.options.show_sort+"&s_sum="+this.options.show_summary+"&r_s="+this.options.review_id+"&chain="+this.options.chain+"&sc_url="+sales_channel_url+"&DOM_id="+DOM_id+"&re_id="+this.options.review_id+"&f_t="+this.options.formated+"&l_t="+this.options.load_time;            
            
            var url_str  = this.base_delivery_service_url+"?"+query_string;                         
            this.common_jsonpRequest(url_str);
         
        },         
        make:function(item_id,DOM_id,options){ 
            if (typeof item_id != 'undefined') {this.item_id = item_id;}
            if (typeof delivery_DOM_id != 'undefined') {this.DOM_id = DOM_id;}

            if (typeof options != 'undefined') {                
                //verifico cada elemento del arreglo
                if (typeof options.element_types_list != 'undefined') {this.options.element_types_list = options.element_types_list;}
                if (typeof options.element_id != 'undefined') {this.options.element_id = options.element_id;}
                if (typeof options.review_id != 'undefined') {this.options.review_id = options.review_id;}
                if (typeof options.country != 'undefined') {this.options.country = options.country;}
                if (typeof options.destination != 'undefined') {this.options.destination = options.destination;}
                if (typeof options.chain != 'undefined') {this.options.chain = options.chain;}
                if (typeof options.initial_date != 'undefined') {this.options.initial_date = options.initial_date;}
                if (typeof options.final_date !='undefined') {this.options.final_date = options.final_date;}
                if (typeof options.per_page != 'undefined') {this.options.per_page = options.per_page;}
                if (typeof options.segment != 'undefined') {this.options.segment = options.segment;}               
                if (typeof options.order != 'undefined') {this.options.order = options.order;}
                if (typeof options.size != 'undefined') {this.options.size = options.size;}
                if (typeof options.brand_interval != 'undefined') {this.options.brand_interval = options.brand_interval;}
                if (typeof options.show_header != 'undefined') {this.options.show_header = options.show_header;}
                if (typeof options.show_filter != 'undefined') {this.options.show_filter = options.show_filter;}
                if (typeof options.show_sort != 'undefined') {this.options.show_sort = options.show_sort;}
                if (typeof options.show_summary != 'undefined') {this.options.show_summary = options.show_summary;}
                if (typeof options.formated != 'undefined') {this.options.formated = options.formated;} 
                if (typeof options.load_time != 'undefined') {this.options.load_time = options.load_time;} 
               
                if(this.options.segment > 1 && this.options.load_time==0){
                    this.options.segment = (this.options.segment -1)*this.options.per_page;
                }
            }               
            this.get_review_list(this.item_id,this.DOM_id,this.options);            
        }
    }
    return delivery_content.make(_item_id,_DOM_id,_options);    
}





