<?php

// load wordpress
require_once('get_wp.php');
class zilla_shortcodes
{
	var	$conf;
	var	$popup;
	var	$params;
	var	$shortcode;
	var $cparams;
	var $cshortcode;
	var $popup_title;
	var $no_preview;
	var $has_child;
	var	$output;
	var	$errors;

	// --------------------------------------------------------------------------

	function __construct( $popup )
	{
		if( file_exists( dirname(__FILE__) . '/config.php' ) )
		{
			$this->conf = dirname(__FILE__) . '/config.php';
			$this->popup = $popup;
			
			$this->formate_shortcode();
		}
		else
		{
			$this->append_error('Config file does not exist');
		}
	}
	
	// --------------------------------------------------------------------------
	
	function formate_shortcode()
	{
		// get config file
		require_once( $this->conf );
		
		if( isset( $zilla_shortcodes[$this->popup]['child_shortcode'] ) )
			$this->has_child = true;
		
		if( isset( $zilla_shortcodes ) && is_array( $zilla_shortcodes ) )
		{
			// get shortcode config stuff
			$this->params = $zilla_shortcodes[$this->popup]['params'];
			$this->shortcode = $zilla_shortcodes[$this->popup]['shortcode'];
			$this->popup_title = $zilla_shortcodes[$this->popup]['popup_title'];
			
			// adds stuff for js use			
			$this->append_output( "\n" . '<div id="_zilla_shortcode" class="hidden">' . $this->shortcode . '</div>' );
			$this->append_output( "\n" . '<div id="_zilla_popup" class="hidden">' . $this->popup . '</div>' );
			
			if( isset( $zilla_shortcodes[$this->popup]['no_preview'] ) && $zilla_shortcodes[$this->popup]['no_preview'] )
			{
				//$this->append_output( "\n" . '<div id="_zilla_preview" class="hidden">false</div>' );
				$this->no_preview = true;		
			}
			
			// filters and excutes params
			foreach( $this->params as $pkey => $param )
			{
				// prefix the fields names and ids with zilla_
				$pkey = 'zilla_' . $pkey;
				
				// popup form row start
				$row_start  = '<tbody>' . "\n";
				$row_start .= '<tr class="form-row">' . "\n";
				$row_start .= '<td class="label">' . $param['label'] . '</td>' . "\n";
				$row_start .= '<td class="field">' . "\n";
				
				// popup form row end
				$row_end	= '<span class="zilla-form-desc">' . $param['desc'] . '</span>' . "\n";
				$row_end   .= '</td>' . "\n";
				$row_end   .= '</tr>' . "\n";					
				$row_end   .= '</tbody>' . "\n";
				
				switch( $param['type'] )
				{
					case 'text' :
						
						// prepare
						$output  = $row_start;
						$output .= '<input type="text" class="zilla-form-text zilla-input" name="' . $pkey . '" id="' . $pkey . '" value="' . $param['std'] . '" />' . "\n";
						$output .= $row_end;
						
						// append
						$this->append_output( $output );
						
						break;
						
					case 'textarea' :
						
						// prepare
						$output  = $row_start;
						$output .= '<textarea rows="10" cols="30" name="' . $pkey . '" id="' . $pkey . '" class="zilla-form-textarea zilla-input">' . $param['std'] . '</textarea>' . "\n";
						$output .= $row_end;
						
						// append
						$this->append_output( $output );
						
						break;
						
					case 'select' :
						
						// prepare
						$output  = $row_start;
						$output .= '<select name="' . $pkey . '" id="' . $pkey . '" class="zilla-form-select zilla-input">' . "\n";
						
						foreach( $param['options'] as $value => $option )
						{
							$output .= '<option value="' . $value . '">' . $option . '</option>' . "\n";
						}
						
						$output .= '</select>' . "\n";
						$output .= $row_end;
						
						// append
						$this->append_output( $output );
						
						break;
						
					case 'checkbox' :
						
						// prepare
						$output  = $row_start;
						$output .= '<label for="' . $pkey . '" class="zilla-form-checkbox">' . "\n";
						$output .= '<input type="checkbox" class="zilla-input" name="' . $pkey . '" id="' . $pkey . '" ' . ( $param['std'] ? 'checked' : '' ) . ' />' . "\n";
						$output .= ' ' . $param['checkbox_text'] . '</label>' . "\n";
						$output .= $row_end;
						
						// append
						$this->append_output( $output );
						
						break;
          
          case 'image' :
            // prepare
            $output  = $row_start;

            $output .= '<input type="text" class="zilla-form-text zilla-input" name="' . $pkey . '" id="' . $pkey . '" value="' . $param['std'] . '" /><br>' . "\n";
            $output .= '<a class="upload-and-attach-link" href="#" >Set image URL using Media library</a>';
            $output .= $row_end;

            global $zillaMediaInit;
            if (empty($zillaMediaInit)) {
              $zillaMediaInit = 1;
              $output .= "<script>
              jQuery(document).ready(function($) {
                wp.media.zillaAddImage = {

                  frame: function() {
                    if ( this._frame )
                      return this._frame;

                    var frame = this._frame = wp.media({
                      title: 'Insert image',
                      library: {
                        type: 'image'
                      },
                      multiple: false
                    });

                    frame.off('select');

                    frame.on('select', function()
                    {
                      var selection = frame.state().get('selection').toJSON(),
                        ids;

                      window.mediaLibraryTarget.val(selection[0]['url']);
                      window.mediaLibraryTarget.change();
                    });

                    return this._frame;
                  }


                }

                jQuery('.upload-and-attach-link').live('click', function() {
                  window.mediaLibraryTarget = jQuery(this).siblings('input').first();

                  wp.media.zillaAddImage.frame().open();
                });
              });
              </script>";
            }

            // append
            $this->append_output( $output );

            break;
          
				}
			}
			
			// checks if has a child shortcode
			if( isset( $zilla_shortcodes[$this->popup]['child_shortcode'] ) )
			{
				// set child shortcode
				$this->cparams = $zilla_shortcodes[$this->popup]['child_shortcode']['params'];
				$this->cshortcode = $zilla_shortcodes[$this->popup]['child_shortcode']['shortcode'];
			
				// popup parent form row start
				$prow_start  = '<tbody>' . "\n";
				$prow_start .= '<tr class="form-row has-child">' . "\n";
				$prow_start .= '<td><a href="#" id="form-child-add" class="button-secondary">' . $zilla_shortcodes[$this->popup]['child_shortcode']['clone_button'] . '</a>' . "\n";
				$prow_start .= '<div class="child-clone-rows">' . "\n";
				
				// for js use
				$prow_start .= '<div id="_zilla_cshortcode" class="hidden">' . $this->cshortcode . '</div>' . "\n";
				
				// start the default row
				$prow_start .= '<div class="child-clone-row">' . "\n";
				$prow_start .= '<ul class="child-clone-row-form">' . "\n";
				
				// add $prow_start to output
				$this->append_output( $prow_start );
				
				foreach( $this->cparams as $cpkey => $cparam )
				{
				
					// prefix the fields names and ids with zilla_
					$cpkey = 'zilla_' . $cpkey;
					
					// popup form row start
					$crow_start  = '<li class="child-clone-row-form-row">' . "\n";
					$crow_start .= '<div class="child-clone-row-label">' . "\n";
					$crow_start .= '<label>' . $cparam['label'] . '</label>' . "\n";
					$crow_start .= '</div>' . "\n";
					$crow_start .= '<div class="child-clone-row-field">' . "\n";
					
					// popup form row end
					$crow_end	  = '<span class="child-clone-row-desc">' . $cparam['desc'] . '</span>' . "\n";
					$crow_end   .= '</div>' . "\n";
					$crow_end   .= '</li>' . "\n";
					
					switch( $cparam['type'] )
					{
						case 'text' :
							
							// prepare
							$coutput  = $crow_start;
							$coutput .= '<input type="text" class="zilla-form-text zilla-cinput" name="' . $cpkey . '" id="' . $cpkey . '" value="' . $cparam['std'] . '" />' . "\n";
							$coutput .= $crow_end;
							
							// append
							$this->append_output( $coutput );
							
							break;
							
						case 'textarea' :
							
							// prepare
							$coutput  = $crow_start;
							$coutput .= '<textarea rows="10" cols="30" name="' . $cpkey . '" id="' . $cpkey . '" class="zilla-form-textarea zilla-cinput">' . $cparam['std'] . '</textarea>' . "\n";
							$coutput .= $crow_end;
							
							// append
							$this->append_output( $coutput );
							
							break;
							
						case 'select' :
							
							// prepare
							$coutput  = $crow_start;
							$coutput .= '<select name="' . $cpkey . '" id="' . $cpkey . '" class="zilla-form-select zilla-cinput">' . "\n";
							
							foreach( $cparam['options'] as $value => $option )
							{
								$coutput .= '<option value="' . $value . '">' . $option . '</option>' . "\n";
							}
							
							$coutput .= '</select>' . "\n";
							$coutput .= $crow_end;
							
							// append
							$this->append_output( $coutput );
							
							break;
            case 'checkbox' :
							
							// prepare
							$coutput  = $crow_start;
							$coutput .= '<label for="' . $cpkey . '" class="zilla-form-checkbox">' . "\n";
							$coutput .= '<input type="checkbox" class="zilla-cinput" name="' . $cpkey . '" id="' . $cpkey . '" ' . ( $cparam['std'] ? 'checked' : '' ) . ' />' . "\n";
							$coutput .= ' ' . $cparam['checkbox_text'] . '</label>' . "\n";
							$coutput .= $crow_end;
							
							// append
							$this->append_output( $coutput );
							
							break;
            case 'image' :

              // prepare
              $coutput  = $crow_start;

              $coutput .= '<input type="text" class="zilla-form-text zilla-cinput" name="' . $cpkey . '" id="' . $cpkey . '" value="' . $cparam['std'] . '" /><br>' . "\n";
              $coutput .= '<a class="upload-and-attach-link" href="#" >
                    Set image URL using Media library
                  </a>';
              $coutput .= $crow_end;

              global $zillaMediaInit;
              if (empty($zillaMediaInit)) {
                $zillaMediaInit = 1;
                $coutput .= "<script>
              jQuery(document).ready(function($) {
                wp.media.zillaAddImage = {

                  frame: function() {
                    if ( this._frame )
                      return this._frame;

                    var frame = this._frame = wp.media({
                      title: 'Insert image',
                      library: {
                        type: 'image'
                      },
                      multiple: false
                    });

                    frame.off('select');

                    frame.on('select', function()
                    {
                      var selection = frame.state().get('selection').toJSON(),
                        ids;

                      window.mediaLibraryTarget.val(selection[0]['url']);
                      window.mediaLibraryTarget.change();
                    });

                    return this._frame;
                  }


                }

                jQuery('.upload-and-attach-link').live('click', function() {
                  window.mediaLibraryTarget = jQuery(this).siblings('input').first();

                  wp.media.zillaAddImage.frame().open();
                });
              });
              </script>";
              }


              // append
              $this->append_output( $coutput );

              break;
					}
				}
				
				// popup parent form row end
				$prow_end    = '</ul>' . "\n";		// end .child-clone-row-form
				$prow_end   .= '<a href="#" class="child-clone-row-remove">Remove</a>' . "\n";
				$prow_end   .= '</div>' . "\n";		// end .child-clone-row
				
				
				$prow_end   .= '</div>' . "\n";		// end .child-clone-rows
				$prow_end   .= '</td>' . "\n";
				$prow_end   .= '</tr>' . "\n";					
				$prow_end   .= '</tbody>' . "\n";
				
				// add $prow_end to output
				$this->append_output( $prow_end );
			}			
		}
	}
	
	// --------------------------------------------------------------------------
	
	function append_output( $output )
	{
		$this->output = $this->output . "\n" . $output;		
	}
	
	// --------------------------------------------------------------------------
	
	function reset_output( $output )
	{
		$this->output = '';
	}
	
	// --------------------------------------------------------------------------
	
	function append_error( $error )
	{
		$this->errors = $this->errors . "\n" . $error;
	}
}

?>