/**
  * Check sidebar dependency conflicts.
  * 
  * @since       1.1.7.3
  */
 protected function isDependencyConflict($strSidebarID)
 {
     if (!isset($this->arrSidebarHierarchies)) {
         // 1.1.7.3+ Store the sidebar hierarchy array in a property.
         $oWO = new ResponsiveColumnWidgets_WidgetOptions();
         $this->arrSidebarHierarchies = $oWO->GetHierarchyBase();
         unset($oWO);
         // for PHP below 5.3
     }
     $oSH = new ResponsiveColumnWidgets_SidebarHierarchy();
     $arrDependencies = $oSH->getDependenciesOf($strSidebarID, $this->arrSidebarHierarchies);
     unset($oSH);
     // for PHP below 5.3.
     if (isset($this->arrSidebarHierarchies['']) || in_array($strSidebarID, $arrDependencies)) {
         return true;
     }
     return false;
 }
    public function form($arrInstance)
    {
        /*
         * Variables - use uniqid() to generate a unique ID to avoid the same ID being inserted among other widgets dropped onto different sidebar boxes.
         */
        // Aboid undefined index warnings.
        $arrInstance = $arrInstance + array('sidebarid_selected' => null, 'sidebarid_parent' => null);
        // For the select tag.
        $strID_SidebarIDSelected = $this->get_field_id('sidebarid_selected');
        $strName_SidebarIDSelected = $this->get_field_name('sidebarid_selected');
        // the string "sidebarid_selected" will be the key for the field and passed as the input array key to the update() method.
        // For the option tag.
        $strID_Selector = $strID_SidebarIDSelected . '_' . uniqid();
        $strClass_Option = $strID_Selector;
        // For the hidden input tag that indicates the sidebar ID of the one to which the selected sidebar belongs.
        $strID_SidebarParent = $this->get_field_id('sidebarid_parent') . '_' . uniqid();
        // the string "sidebarid" will be the key for the field and passed as the input array key to the update() method.
        $strName_SidebarParent = $this->get_field_name('sidebarid_parent');
        // the string "sidebarid" will be the key for the field and passed as the input array key to the update() method.
        // Create the array for the hierarchy reference.
        $oSH = new ResponsiveColumnWidgets_SidebarHierarchy();
        $arrDependencies = $oSH->GetDependencies();
        unset($oSH);
        // make sure the object is released.
        // echo 'Sidebar Hierarchy: <br />'
        // . $this->DumpArray( $arrDependencies );
        $oWO = new ResponsiveColumnWidgets_WidgetOptions();
        $arrWidgetOptions = $oWO->GetRegisteredWidgetOptionsByBaseID();
        unset($oWO);
        // make sure the object is released.
        // echo 'Widget Options: <br />'
        // . '<div style="font-size: 80%; margin-left: 0px; padding-left: 0px">'
        // . $this->DumpArray( $arrWidgetOptions )
        // . '</div>';
        // echo 'This Widget ID: ' . $this->id . '<br />';
        // Set the container sidebar ID - note that this will not work ( a null will be assigned ) when the widget is dropped for the first time. ( works after saving the form options. )
        $this->strContainerSidebarID = $this->GetContainerSidebarID();
        // echo 'Parent Sidebar ID: ' . $this->strContainerSidebarID . '<br />';
        ?>
        <p>    
    
            <input type="hidden" name="<?php 
        echo $strName_SidebarParent;
        ?>
" id="<?php 
        echo $strID_SidebarParent;
        ?>
" class="<?php 
        echo $this->strClassSelector_ContainerSidebarID;
        ?>
" value="<?php 
        echo $this->strContainerSidebarID;
        ?>
" />
            <label for="<?php 
        echo $strID_Selector;
        ?>
">
                <?php 
        _e('Select Sidebar', 'responsive-column-widgets');
        ?>
:
            </label>
            <br />
            <select name="<?php 
        echo $strName_SidebarIDSelected;
        ?>
" id="<?php 
        echo $strID_Selector;
        ?>
" class="<?php 
        echo $this->strClassSelectorFormSelect;
        ?>
">
                <?php 
        // the default non-select item.
        echo '<option class="' . $strClass_Option . ' ' . $this->strClassSelectorFormOption . '" value="">' . '-------- ' . __('Select a sidebar', 'responsive-column-widgets') . ' --------' . '</option>';
        foreach ($GLOBALS['wp_registered_sidebars'] as $arrSidebar) {
            $bDisabled = false;
            // wp_inactive_widgets is for the Inactive Widgets section box in the admin widget page. So do nothing.
            if ($arrSidebar['id'] == 'wp_inactive_widgets') {
                continue;
            }
            if (in_array('inactive-sidebar', explode(' ', $arrSidebar['class']))) {
                continue;
            }
            // If the parsing sidebar ID is the same as the container sidebar ID, disable it.
            if ($arrSidebar['id'] == $this->strContainerSidebarID) {
                $bDisabled = true;
            }
            // If the parsing sidebar ID matches this widget's parent (container) sidebar ID, disable it.
            // The $this->id property is defined in the WP_Widget class ( the parent class of this class ) and the id properties is the widget id of this widget instance.
            if (isset($arrWidgetOptions[$this->id]['sidebarid_parent']) && $arrWidgetOptions[$this->id]['sidebarid_parent'] == $arrSidebar['id']) {
                $bDisabled = true;
            }
            // If the parsing sidebar ID ( the candidate to be a child sidebar ) has this container sidebar as its child, then disable it.
            if (isset($arrDependencies[$arrSidebar['id']]) && in_array($this->strContainerSidebarID, $arrDependencies[$arrSidebar['id']])) {
                $bDisabled = true;
            }
            // If the container sidebar    ID has the parsing sidebar ID as its dependency, disable it.
            // This should not be commented out but currently the JavaScript scripts of this plugin are not able to enable this item
            // when the position of widget is changed. Until the script to fix it is added, let it being commented out.
            // if ( isset( $arrDependencies[ $this->strContainerSidebarID ] ) && in_array( $arrSidebar['id'], $arrDependencies[ $this->strContainerSidebarID ] ) )
            // $bDisabled = true;
            echo '<option class="' . $strClass_Option . ' ' . $this->strClassSelectorFormOption . '" value="' . esc_attr($arrSidebar['id']) . '" ' . ($arrSidebar['id'] == $arrInstance['sidebarid_selected'] ? 'selected="Selected"' : '') . ($bDisabled ? ' disabled=Disabled' : '') . '>' . ucwords($arrSidebar['name']) . '</option>';
        }
        ?>
            </select>
        </p>
        
        <?php 
        if (version_compare(get_bloginfo('version'), '3.6', "<")) {
            ?>
        <script type="text/javascript" class="responsive-column-widgets-widget-registration-script" >

            var select = jQuery( "select#<?php 
            echo $strID_Selector;
            ?>
" );    
            var container_sidebar_id = select.closest( ".widgets-sortables" ).attr( "id" ); 
            var selects = jQuery( "select.<?php 
            echo $this->strClassSelectorFormSelect;
            ?>
" );

            console.log( '(RCW Log) The plugin widget form has been rendered.' );
            if ( typeof container_sidebar_id !== 'undefined' && container_sidebar_id != 'wp_inactive_widgets' ) {
                
                console.log( 
                    '(RCW Log) Container Sidebar ID: ' + container_sidebar_id + '\n' +
                    'Widget ID: <?php 
            echo $this->id;
            ?>
'                 
                );
                
                // Set the container sidebar ID to the hidden input field. This is important for the update() method to update the form options.
                jQuery( "input#<?php 
            echo $strID_SidebarParent;
            ?>
" ).val( container_sidebar_id );    
                
                ResponsiveColumnWidgets_DoAjaxRequestForWidgetRegistration();
                
            }
                        
            // When the widget is drag'n-dropped,
            var container_divs = selects.closest( "div.widgets-sortables" );
        
            // (Re)Hook the widget drop event.                
            // Somehow the live() method causes syntax errors so use the bind method.
            container_divs.unbind( 'sortstop sortreceive' );    // unbind previous event hooks.
            container_divs.bind( 'sortstop sortreceive', function( event, ui ){
                ResponsiveColumnWidgets_WidgetDropEvent( event, ui );
            });
    
        </script>
        <?php 
        }
        ?>
        <?php 
        if (version_compare(get_bloginfo('version'), '3.6', ">=")) {
            ?>
        <script type="text/javascript" class="responsive-column-widgets-widget-registration-script" >
        
            var select = jQuery( "select#<?php 
            echo $strID_Selector;
            ?>
" );        
            var container_sidebar_id = select.closest( ".widgets-sortables" ).attr( "id" ); 
            var selects = jQuery( "select.<?php 
            echo $this->strClassSelectorFormSelect;
            ?>
" );

            console.log( '(RCW Log) The plugin widget form has been rendered.' );
            if ( typeof container_sidebar_id !== 'undefined' && container_sidebar_id != 'wp_inactive_widgets' ) {
                
                console.log( 
                    '(RCW Log) Container Sidebar ID: ' + container_sidebar_id + '\n' +
                    'Widget ID: <?php 
            echo $this->id;
            ?>
'                 
                );
                
                // Set the container sidebar ID to the hidden input field. This is important for the update() method to update the form options.
                jQuery( "input#<?php 
            echo $strID_SidebarParent;
            ?>
" ).val( container_sidebar_id );    
                
                ResponsiveColumnWidgets_DoAjaxRequestForWidgetRegistration();
                
            }        
                    
        </script>
        <?php 
        }
    }
 public function DumpSidebarHierarchy()
 {
     // since 1.1.3
     $oSH = new ResponsiveColumnWidgets_SidebarHierarchy();
     $oSH->DumpSidebarHierarchy();
 }