static function isArray($array, $key, $index = 0)
 {
     if ($index >= count($key)) {
         return true;
     }
     if (array_key_exists($key[$index], $array)) {
         return PBHelper::isArray($array[$key[$index]], $key, ++$index);
     }
     return false;
 }
    function create()
    {
        $html = null;
        $element = array();
        $panelHTML = array();
        $Validation = new PBValidation();
        foreach ($this->componentData['structure']['element'] as $elementData) {
            $panelId = $elementData['ui']['panel'];
            $multiId = $elementData['ui']['multi'];
            $groupId = $elementData['ui']['group'];
            $element[$panelId][$multiId][$groupId][] = $elementData;
        }
        foreach ($element as $panelId => $panelData) {
            foreach ($panelData as $multiId => $multiData) {
                if ($multiId != 0) {
                    if (!isset($panelHTML[$panelId])) {
                        $panelHTML[$panelId] = null;
                    }
                    $elementMultiId = array();
                    foreach ($multiData as $groupData) {
                        foreach ($groupData as $elementData) {
                            $elementMultiId[$elementData['id']] = $elementData['id'];
                        }
                    }
                    $count = 1;
                    foreach ($elementMultiId as $elementMultiIdId) {
                        if (array_key_exists($elementMultiIdId, $this->componentValue)) {
                            $count = count($this->componentValue[$elementMultiIdId]) > $count ? count($this->componentValue[$elementMultiIdId]) : $count;
                        }
                    }
                    for ($j = 0; $j < $count; $j++) {
                        $elementHTML = null;
                        $i = 0;
                        $fieldCount = 0;
                        foreach ($multiData as $groupId => $groupData) {
                            foreach ($groupData as $elementData) {
                                if ($this->displayField($elementData['visibility'])) {
                                    if ($groupId == 0) {
                                        $fieldCount += count($groupData);
                                    } else {
                                        $fieldCount++;
                                    }
                                    break;
                                }
                            }
                        }
                        foreach ($multiData as $groupId => $groupData) {
                            if ($groupId != 0) {
                                $html = null;
                                foreach ($groupData as $elementData) {
                                    if (!$this->displayField($elementData['visibility'])) {
                                        continue;
                                    }
                                    $id = $elementData['id'];
                                    PBHelper::removeUIndex($this->componentValue[$id], $j);
                                    $html .= '
										<div>
											' . $this->createFieldLegend($elementData['ui']['text']['label']) . '
											' . $this->createField($elementData, $this->componentValue[$id][$j]) . '
										</div>
									';
                                }
                                PBHelper::removeUIndex($this->componentData['structure']['ui']['group'][$groupId], 'header', 'subheader');
                                if ($Validation->isNotEmpty($html)) {
                                    $i++;
                                    $elementHTML .= '
										<li>
											' . $this->createGroupHeader($this->componentData['structure']['ui']['group'][$groupId]['header']) . '
											' . $this->createGroupSubheader($this->componentData['structure']['ui']['group'][$groupId]['header'], $this->componentData['structure']['ui']['group'][$groupId]['subheader']) . '
											' . $html . '
											' . ($i == $fieldCount ? '<a href="#" class="pb-link-remove">' . __('Remove') . '</a>' : null) . '
										</li>
									';
                                }
                            } else {
                                foreach ($groupData as $elementData) {
                                    if (!$this->displayField($elementData['visibility'])) {
                                        continue;
                                    }
                                    $i++;
                                    $id = $elementData['id'];
                                    PBHelper::removeUIndex($this->componentValue[$id], $j);
                                    $elementHTML .= '
										<li>
											' . $this->createGroupHeader($elementData['ui']['text']['header']) . '
											' . $this->createGroupSubheader($elementData['ui']['text']['header'], $elementData['ui']['text']['subheader']) . '
											<div>
												' . $this->createFieldLegend($elementData['ui']['text']['label']) . '
												' . $this->createField($elementData, $this->componentValue[$id][$j]) . '
											</div>
											' . ($i == $fieldCount ? '<a href="#" class="pb-link-remove">' . __('Remove') . '</a>' : null) . '
										</li>
									';
                                }
                            }
                        }
                        if ($Validation->isNotEmpty($elementHTML)) {
                            $panelHTML[$panelId] .= '
								<div>
									<h3>' . $this->componentData['structure']['ui']['multi'][$multiId]['header'] . '</h3>
									<ul class="pb-field-list">	
										' . $elementHTML . '
									</ul>
								</div>
							';
                        }
                    }
                    if ($Validation->isNotEmpty($panelHTML[$panelId])) {
                        $panelHTML[$panelId] = '
							<li>
								<div class="pb-multi-field">
									' . $panelHTML[$panelId] . '
								</div>
								<a href="#" class="pb-link-add">' . __('Add new', PLUGIN_PAGE_BUILDER_DOMAIN) . '</a>
							</li>
						';
                    }
                } else {
                    foreach ($multiData as $groupId => $groupData) {
                        if (!isset($panelHTML[$panelId])) {
                            $panelHTML[$panelId] = null;
                        }
                        if ($groupId != 0) {
                            $elementHTML = null;
                            foreach ($groupData as $elementData) {
                                if (!$this->displayField($elementData['visibility'])) {
                                    continue;
                                }
                                $id = $elementData['id'];
                                PBHelper::removeUIndex($this->componentValue, $id);
                                $elementHTML .= '
									<div>
										' . $this->createFieldLegend($elementData['ui']['text']['label']) . '
										' . $this->createField($elementData, $this->componentValue[$id]) . '
									</div>
								';
                            }
                            PBHelper::removeUIndex($this->componentData['structure']['ui']['group'][$groupId], 'header', 'subheader');
                            if ($Validation->isNotEmpty($elementHTML)) {
                                $panelHTML[$panelId] .= '
									<li>
										' . $this->createGroupHeader($this->componentData['structure']['ui']['group'][$groupId]['header']) . '
										' . $this->createGroupSubheader($this->componentData['structure']['ui']['group'][$groupId]['header'], $this->componentData['structure']['ui']['group'][$groupId]['subheader']) . '
										' . $elementHTML . '
									</li>
								';
                            }
                        } else {
                            foreach ($groupData as $elementData) {
                                if (!$this->displayField($elementData['visibility'])) {
                                    continue;
                                }
                                $id = $elementData['id'];
                                PBHelper::removeUIndex($this->componentValue, $id);
                                $panelHTML[$panelId] .= '
									<li>
										' . $this->createGroupHeader($elementData['ui']['text']['header']) . '
										' . $this->createGroupSubheader($elementData['ui']['text']['header'], $elementData['ui']['text']['subheader']) . '
										<div>
											' . $this->createFieldLegend($elementData['ui']['text']['label']) . '
											' . $this->createField($elementData, $this->componentValue[$id]) . '
										</div>
									</li>
								';
                            }
                        }
                    }
                }
            }
        }
        if (PBHelper::isArray($this->componentData['structure'], array('ui', 'panel'))) {
            $tabBar = null;
            $tabContent = null;
            foreach ($panelHTML as $index => $value) {
                $tabBar .= '
					<li>
						<a href="#tab-' . $index . '">' . $this->componentData['structure']['ui']['panel'][$index]['header'] . '</a>
					</li>
				';
                $tabContent .= '
					<div id="tab-' . $index . '">
						<div>
							<ul class="pb-reset-list pb-field-list">
								' . $value . '
							</ul>
						</div>
					</div>
				';
            }
            $html = '
				<div class="pb-tab">
				
					<ul>
						' . $tabBar . '
					</ul>
					
					' . $tabContent . '

				</div>
			';
        } else {
            $html = '
				<ul class="pb-reset-list pb-field-list">
					' . $panelHTML[0] . '
				</ul>
			';
        }
        $html = '
			<div class="pb">
				<form name="pb-component-edit-form" id="pb-component-edit-form" action="">
					' . $html . '
				</form>
			</div>
		';
        return $html;
    }