/**
 * UI.Layout creates a 'page-layout' that has auto-sizing 'center pane'
 * surrounded by up to four collapsible and resizable 'border panes'
 * (north, south, east & west). It can also create multiple headers &
 * footers inside each pane.
 * @param string $layoutName The layout name
 * @param string $selector jQuery Selector
 * @param array() $configurations Array. See the options and events in
 *        http://layout.jquery-dev.net/documentation.html#Options
 */
function ui_layout_configure_to($layoutName, $selector, $configurations = array())
{
    $configurations = get_default_widget_configuration('app_ys_jquery_ui_layout_defaults', $configurations);
    if (isset($configurations['yml'])) {
        $ymlItems = sfYaml::load($configurations['yml']);
        $ymlIndex = isset($configurations['ymlKey']) ? $configurations['ymlKey'] : 'layout';
        $ymlConfigurations = isset($ymlItems[$ymlIndex]) ? $ymlItems[$ymlIndex] : array();
        $configurations = array_merge($ymlConfigurations, $configurations);
        unset($configurations['yml'], $configurations['ymlKey']);
    }
    $support = core_init_javasacript_tag();
    $support .= 'var ' . $layoutName . ';';
    $pattern = ui_layout_pattern($configurations);
    $utilityMethods = '';
    if (!is_array($configurations) || !sizeof($configurations) > 0) {
        $configurations = array('applyDefaultStyles' => true);
    } else {
        if (!isset($configurations['name'])) {
            $configurations['name'] = $layoutName;
        }
        $utilityMethods = ui_layout_utility_methods_pattern($layoutName, $configurations);
    }
    if (isset($configurations['cache']) && $configurations['cache'] === true) {
        echo add_jquery_support('window', 'unload', like_function("layoutState.save('{$layoutName}')"));
        $pattern = "\$.extend( {$pattern} , layoutState.load('{$layoutName}'))";
    }
    $jsVar = like_function($layoutName . ' = ' . jquery_support($selector, 'layout', $pattern, true, $utilityMethods));
    $support .= jquery_support($selector, 'ready', $jsVar);
    echo $support .= core_end_javasacript_tag();
}
/**
 *
 * @param string $selector A jQuery Selector
 * @param string $events An event type to unbind
 * @param string $args Arguments or a javascript function sintax.
 * @param bollean $unescapeId The jQUery selector without "'"
 * @param string $accesors Accesor for the jQuery object
 * @return string jQuery syntax
 */
function add_jquery_support($selector, $event = 'ready', $args = "function(){return false;}", $unescapeId = true, $accesors = '', $addSeparator = true)
{
    $support = core_init_javasacript_tag();
    if ($event === 'ready') {
        $support .= jquery_support($selector, 'ready', $args);
    } else {
        $support .= jquery_support($selector, 'ready', like_function(jquery_support($selector, $event, $args)));
    }
    $support .= core_end_javasacript_tag();
    return $support;
}