/**
 * shortcode to include ads in frontend
 *
 * @since 0.9.4
 * @param array $atts
 */
function quads_shortcode_display_ad($atts)
{
    if (!quads_ad_is_allowed()) {
        return;
    }
    //return quads_check_meta_setting('NoAds');
    if (quads_check_meta_setting('NoAds') === '1') {
        return;
    }
    $id = isset($atts['id']) ? (int) $atts['id'] : 0;
    return quads_get_ad($id);
}
/**
 * Whether a registered ad location has an ad assigned to it.
 *
 * @param string $location      Location id
 * @return bool
 */
function quads_has_ad($location)
{
    global $quads_options;
    $result = false;
    $location_settings = quads_get_ad_location_settings($location);
    if ($location_settings['status'] && !empty($location_settings['ad'])) {
        $result = true;
    }
    if (!quads_ad_is_allowed() || quads_ad_reach_max_count()) {
        $result = false;
    }
    /**
     * Filter whether an ad is assigned to the specified location.
     */
    return apply_filters('quads_has_ad', $result, $location);
}
/**
 * Main processing for the_content filter
 * 
 * @global arr $quads_options all plugin settings
 * @global int $ShownAds number of active content ads (reseted internally so we have to use a similar global below for external purposes: $ad_count_content)
 * @global arr $AdsId Whitespace trimmed array of ad codes
 * @global int $numberWidgets number of ad widgets
 * @global int $numberAds number of ads
 * @global string $AdsWidName name of widget
 * @global int $ad_count_content   number of active content ads
 * @global int $ad_count_shortcode number of active shortcode ads
 * @param string $content
 * 
 * @return string
 * 
 * @since 0.9.0
 */
function quads_process_content($content)
{
    global $quads_options, $ShownAds, $AdsId, $numberWidgets, $numberAds, $AdsWidName, $ad_count_content, $ad_count_shortcode;
    // Return original content if QUADS is not allowed
    if (!quads_ad_is_allowed($content)) {
        $content = quads_clean_tags($content);
        return $content;
    }
    $AdsToShow = $quads_options['maxads'];
    if (strpos($content, '<!--OffWidget-->') === false) {
        for ($i = 1; $i <= $numberWidgets; $i++) {
            $wadsid = sanitize_title(str_replace(array('(', ')'), '', sprintf($AdsWidName, $i)));
            $AdsToShow -= is_active_widget('', '', $wadsid) ? 1 : 0;
        }
    }
    if ($ShownAds + $ad_count_shortcode >= $AdsToShow) {
        // ShownAds === 0 or larger/equal than $AdsToShow
        $content = quads_clean_tags($content);
        return $content;
    }
    // remove whitespaces at beginning and end of all ad codes
    if (count($AdsId) === 0) {
        //
        for ($i = 1; $i <= $numberAds; $i++) {
            $tmp = trim($quads_options['ad' . $i]['code']);
            if (!empty($tmp)) {
                $AdsId[] = $i;
            }
        }
    }
    // Ad code array is empty so break here
    if (count($AdsId) === 0) {
        $content = quads_clean_tags($content);
        return $content;
    }
    /* ... Tidy up content ... */
    $content = str_replace("<p></p>", "##QA-TP1##", $content);
    $content = str_replace("<p>&nbsp;</p>", "##QA-TP2##", $content);
    $offdef = strpos($content, '<!--OffDef-->') !== false;
    if (!$offdef) {
        $AdsIdCus = array();
        $cusads = 'CusAds';
        $cusrnd = 'CusRnd';
        $begn1 = isset($quads_options['pos1']['BegnAds']) ? true : false;
        $begn2 = isset($quads_options['pos1']['BegnRnd']) ? $quads_options['pos1']['BegnRnd'] : 0;
        $midd1 = isset($quads_options['pos2']['MiddAds']) ? true : false;
        $midd2 = isset($quads_options['pos2']['MiddRnd']) ? $quads_options['pos2']['MiddRnd'] : 0;
        $endi1 = isset($quads_options['pos3']['EndiAds']) ? true : false;
        $endi2 = isset($quads_options['pos3']['EndiRnd']) ? $quads_options['pos3']['EndiRnd'] : 0;
        $more1 = isset($quads_options['pos4']['MoreAds']) ? true : false;
        $more2 = isset($quads_options['pos4']['MoreRnd']) ? $quads_options['pos4']['MoreRnd'] : 0;
        $lapa1 = isset($quads_options['pos5']['LapaAds']) ? true : false;
        $lapa2 = isset($quads_options['pos5']['LapaRnd']) ? $quads_options['pos5']['LapaRnd'] : 0;
        $rc = 3;
        $default = 5;
        for ($i = 1; $i <= $rc; $i++) {
            $key = $default + $i;
            // 6;7;8
            $para1[$i] = isset($quads_options['pos' . $key]['Par' . $i . 'Ads']) ? $quads_options['pos' . $key]['Par' . $i . 'Ads'] : 0;
            $para2[$i] = isset($quads_options['pos' . $key]['Par' . $i . 'Rnd']) ? $quads_options['pos' . $key]['Par' . $i . 'Rnd'] : 0;
            $para3[$i] = isset($quads_options['pos' . $key]['Par' . $i . 'Nup']) ? $quads_options['pos' . $key]['Par' . $i . 'Nup'] : 0;
            $para4[$i] = isset($quads_options['pos' . $key]['Par' . $i . 'Con']) ? $quads_options['pos' . $key]['Par' . $i . 'Con'] : 0;
        }
        $imageActive = isset($quads_options['pos9']['Img1Ads']) ? $quads_options['pos9']['Img1Ads'] : false;
        $imageAdNo = isset($quads_options['pos9']['Img1Rnd']) ? $quads_options['pos9']['Img1Rnd'] : false;
        $imageNo = isset($quads_options['pos9']['Img1Nup']) ? $quads_options['pos9']['Img1Nup'] : false;
        $imageCaption = isset($quads_options['pos9']['Img1Con']) ? $quads_options['pos9']['Img1Con'] : false;
        if ($begn2 == 0) {
            $b1 = $cusrnd;
        } else {
            $b1 = $cusads . $begn2;
            array_push($AdsIdCus, $begn2);
        }
        if ($more2 == 0) {
            $r1 = $cusrnd;
        } else {
            $r1 = $cusads . $more2;
            array_push($AdsIdCus, $more2);
        }
        if ($midd2 == 0) {
            $m1 = $cusrnd;
        } else {
            $m1 = $cusads . $midd2;
            array_push($AdsIdCus, $midd2);
        }
        if ($lapa2 == 0) {
            $g1 = $cusrnd;
        } else {
            $g1 = $cusads . $lapa2;
            array_push($AdsIdCus, $lapa2);
        }
        if ($endi2 == 0) {
            $b2 = $cusrnd;
        } else {
            $b2 = $cusads . $endi2;
            array_push($AdsIdCus, $endi2);
        }
        for ($i = 1; $i <= $rc; $i++) {
            if ($para2[$i] == 0) {
                $b3[$i] = $cusrnd;
            } else {
                $b3[$i] = $cusads . $para2[$i];
                array_push($AdsIdCus, $para2[$i]);
            }
        }
        // Check if image ad is random one
        if ($imageAdNo == 0) {
            $b4 = $cusrnd;
        } else {
            $b4 = $cusads . $imageAdNo;
            array_push($AdsIdCus, $imageAdNo);
        }
        // Check if image ad is middle one
        if ($midd1 && strpos($content, '<!--OffMiddle-->') === false) {
            if (substr_count(strtolower($content), '</p>') >= 2) {
                $sch = "</p>";
                $content = str_replace("</P>", $sch, $content);
                $arr = explode($sch, $content);
                $nn = 0;
                $mm = strlen($content) / 2;
                for ($i = 0; $i < count($arr); $i++) {
                    $nn += strlen($arr[$i]) + 4;
                    if ($nn > $mm) {
                        if ($mm - ($nn - strlen($arr[$i])) > $nn - $mm && $i + 1 < count($arr)) {
                            $arr[$i + 1] = '<!--' . $m1 . '-->' . $arr[$i + 1];
                        } else {
                            $arr[$i] = '<!--' . $m1 . '-->' . $arr[$i];
                        }
                        break;
                    }
                }
                $content = implode($sch, $arr);
            }
        }
        // Check if image ad is "More Tag" one
        if ($more1 && strpos($content, '<!--OffAfMore-->') === false) {
            $mmr = '<!--' . $r1 . '-->';
            $postid = get_the_ID();
            $content = str_replace('<span id="more-' . $postid . '"></span>', $mmr, $content);
        }
        if ($begn1 && strpos($content, '<!--OffBegin-->') === false) {
            $content = '<!--' . $b1 . '-->' . $content;
        }
        if ($endi1 && strpos($content, '<!--OffEnd-->') === false) {
            $content = $content . '<!--' . $b2 . '-->';
        }
        if ($lapa1 && strpos($content, '<!--OffBfLastPara-->') === false) {
            $sch = "<p>";
            $content = str_replace("<P>", $sch, $content);
            $arr = explode($sch, $content);
            if (count($arr) > 2) {
                $content = implode($sch, array_slice($arr, 0, count($arr) - 1)) . '<!--' . $g1 . '-->' . $sch . $arr[count($arr) - 1];
            }
        }
        for ($i = $rc; $i >= 1; $i--) {
            if ($para1[$i]) {
                $sch = "</p>";
                $content = str_replace("</P>", $sch, $content);
                $arr = explode($sch, $content);
                if ((int) $para3[$i] < count($arr)) {
                    $content = implode($sch, array_slice($arr, 0, $para3[$i])) . $sch . '<!--' . $b3[$i] . '-->' . implode($sch, array_slice($arr, $para3[$i]));
                } elseif ($para4[$i]) {
                    $content = implode($sch, $arr) . '<!--' . $b3[$i] . '-->';
                }
            }
        }
        if ($imageActive) {
            // Sanitation
            $imgtag = "<img";
            $delimiter = ">";
            $caption = "[/caption]";
            $atag = "</a>";
            $content = str_replace("<IMG", $imgtag, $content);
            $content = str_replace("</A>", $atag, $content);
            // Start
            $arr = explode($imgtag, $content);
            if ((int) $imageNo < count($arr)) {
                $arrImages = explode($delimiter, $arr[$imageNo]);
                if (count($arrImages) > 1) {
                    $tss = explode($caption, $arr[$imageNo]);
                    $ccp = count($tss) > 1 ? strpos(strtolower($tss[0]), '[caption ') === false : false;
                    $arrAtag = explode($atag, $arr[$imageNo]);
                    $cdu = count($arrAtag) > 1 ? strpos(strtolower($arrAtag[0]), '<a href') === false : false;
                    if ($imageCaption && $ccp) {
                        $arr[$imageNo] = implode($caption, array_slice($tss, 0, 1)) . $caption . "\r\n" . '<!--' . $b4 . '-->' . "\r\n" . implode($caption, array_slice($tss, 1));
                    } else {
                        if ($cdu) {
                            $arr[$imageNo] = implode($atag, array_slice($arrAtag, 0, 1)) . $atag . "\r\n" . '<!--' . $b4 . '-->' . "\r\n" . implode($atag, array_slice($arrAtag, 1));
                        } else {
                            $arr[$imageNo] = implode($delimiter, array_slice($arrImages, 0, 1)) . $delimiter . "\r\n" . '<!--' . $b4 . '-->' . "\r\n" . implode($delimiter, array_slice($arrImages, 1));
                        }
                    }
                }
                $content = implode($imgtag, $arr);
            }
        }
    }
    /* 
     * Tidy up content
     */
    $content = '<!--EmptyClear-->' . $content . "\n" . '<div style="font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both"></div>';
    $content = quads_clean_tags($content, true);
    /* 
     * Replace Beginning/Middle/End Ads1-10
     */
    if (!$offdef) {
        for ($i = 1; $i <= count($AdsIdCus); $i++) {
            if (strpos($content, '<!--' . $cusads . $AdsIdCus[$i - 1] . '-->') !== false && in_array($AdsIdCus[$i - 1], $AdsId)) {
                $content = quads_replace_ads($content, $cusads . $AdsIdCus[$i - 1], $AdsIdCus[$i - 1]);
                $AdsId = quads_del_element($AdsId, array_search($AdsIdCus[$i - 1], $AdsId));
                $ShownAds += 1;
                quads_set_ad_count_content();
                if (quads_ad_reach_max_count() || !count($AdsId)) {
                    $content = quads_clean_tags($content);
                    return $content;
                }
                /*if( ($ShownAds+$ad_count_shortcode) >= $AdsToShow || !count($AdsId) ){ 
                      $content = quads_clean_tags($content); 
                      return $content;
                  };*/
            }
        }
    }
    /**
     * Replace Quicktags Ads1 to Ads10
     **/
    $tcn = count($AdsId);
    $tt = 0;
    for ($i = 1; $i <= $tcn; $i++) {
        if (strpos($content, '<!--Ads' . $AdsId[$tt] . '-->') !== false) {
            $content = quads_replace_ads($content, 'Ads' . $AdsId[$tt], $AdsId[$tt]);
            $AdsId = quads_del_element($AdsId, $tt);
            $ShownAds += 1;
            quads_set_ad_count_content();
            if (quads_ad_reach_max_count() || !count($AdsId)) {
                $content = quads_clean_tags($content);
                return $content;
            }
            /*if( $ShownAds+$ad_count_shortcode >= $AdsToShow || !count($AdsId) ){ 
                  $content = quads_clean_tags($content); 
                  return $content;   
              };*/
        } else {
            $tt += 1;
        }
    }
    /* ... Replace Beginning/Middle/End random Ads ... */
    if (!$offdef) {
        if (strpos($content, '<!--' . $cusrnd . '-->') !== false && ($showall || is_singular())) {
            $tcx = count($AdsId);
            $tcy = substr_count($content, '<!--' . $cusrnd . '-->');
            for ($i = $tcx; $i <= $tcy - 1; $i++) {
                array_push($AdsId, -1);
            }
            shuffle($AdsId);
            for ($i = 1; $i <= $tcy; $i++) {
                $content = quads_replace_ads($content, $cusrnd, $AdsId[0]);
                $AdsId = quads_del_element($AdsId, 0);
                $ShownAds += 1;
                quads_set_ad_count_content();
                if (quads_ad_reach_max_count() || !count($AdsId)) {
                    $content = quads_clean_tags($content);
                    return $content;
                }
                /*if( ($ShownAds+$ad_count_shortcode) >= $AdsToShow || !count($AdsId) ){ 
                      $content = quads_clean_tags($content); 
                      return $content; 
                  };*/
            }
        }
    }
    /*
     * Replace RndAds Random Ads
     */
    if (strpos($content, '<!--RndAds-->') !== false && ($showall || is_singular())) {
        $AdsIdTmp = array();
        shuffle($AdsId);
        for ($i = 1; $i <= $AdsToShow - $ShownAds; $i++) {
            if ($i <= count($AdsId)) {
                array_push($AdsIdTmp, $AdsId[$i - 1]);
            }
        }
        $tcx = count($AdsIdTmp);
        $tcy = substr_count($content, '<!--RndAds-->');
        for ($i = $tcx; $i <= $tcy - 1; $i++) {
            array_push($AdsIdTmp, -1);
        }
        shuffle($AdsIdTmp);
        for ($i = 1; $i <= $tcy; $i++) {
            $tmp = $AdsIdTmp[0];
            $content = quads_replace_ads($content, 'RndAds', $AdsIdTmp[0]);
            $AdsIdTmp = quads_del_element($AdsIdTmp, 0);
            if ($tmp != -1) {
                $ShownAds += 1;
            }
            quads_set_ad_count_content();
            if (quads_ad_reach_max_count() || !count($AdsIdTmp)) {
                $content = quads_clean_tags($content);
                return $content;
            }
            /*if( $ShownAds >= $AdsToShow || !count($AdsIdTmp) ){ 
                  $content = clean_tags($content); 
                  return $content; 
              };*/
        }
    }
    //$content = $ad_count;
    /* ... That's it. DONE :) ... */
    $content = quads_clean_tags($content);
    // Reset ad_count - Important!!!
    $ad_count_content = 0;
    return $content;
}