﻿// 
// Bibc.Client.MarkupBuilder 
//

Type.registerNamespace('Bibc.Client');


// Class ctor
// This code gets called when you instantiate this class
Bibc.Client.MarkupBuilder = function Bibc$Client$MarkupBuilder() 
{
    // Calls the base ctor, if any
    Bibc.Client.MarkupBuilder.initializeBase(this);
    
    // Initializes the private members
    this._header = "";
    this._footer = "";
    this._itemTemplate = "";
}
Bibc.Client.MarkupBuilder = function Bibc$Client$MarkupBuilder(header, footer) 
{
    // Calls the base ctor, if any
    Bibc.Client.MarkupBuilder.initializeBase(this);
    
    // Initializes the private members
    this._header = header;
    this._footer = footer;
    this._itemTemplate = "";
}

// PROPERTY:: header: string 
function Bibc$Client$MarkupBuilder$get_header() { 
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._header;
}
function Bibc$Client$MarkupBuilder$set_header(value) {
    var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
    if (e) throw e;

    this._header = value;
}

// PROPERTY:: footer: string 
function Bibc$Client$MarkupBuilder$get_footer() { 
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._footer;
}
function Bibc$Client$MarkupBuilder$set_footer(value) {
    var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
    if (e) throw e;

    this._footer = value;
}

// PROPERTY:: itemTemplate: string 
function Bibc$Client$MarkupBuilder$get_itemTemplate() { 
    if (arguments.length !== 0) throw Error.parameterCount();
    return this._itemTemplate;
}
function Bibc$Client$MarkupBuilder$set_itemTemplate(value) {
    var e = Function._validateParams(arguments, [{name: 'value', type: String}]);
    if (e) throw e;

    this._itemTemplate = value;
}


// METHOD:: bind()
function Bibc$Client$MarkupBuilder$bind(data) {
   var temp = this._generate(data);
   return temp;
}

// METHOD:: loadHeader()
function Bibc$Client$MarkupBuilder$loadHeader(markUp) {
   this._header = markUp;
}

// METHOD:: loadFooter()
function Bibc$Client$MarkupBuilder$loadFooter(markUp) {
   this._footer = markUp;
}

// METHOD:: loadItemTemplate()
function Bibc$Client$MarkupBuilder$loadItemTemplate(markUp) {
   this._itemTemplate = markUp;
}

///////                     ///////
///////  PRIVATE members    ///////
///////                     ///////


function Bibc$Client$MarkupBuilder$_generate(data) {
    var _builder = new Sys.StringBuilder(this._header);
    
    for(i=0; i<data.length; i++)
    {
        var dataItem = data[i];
        var template = this._itemTemplate;

        var pattern = /#\w+/g;  // Finds all #word occurrences
        var matches = template.match(pattern);

        if (matches != null) {
            for (j = 0; j < matches.length; j++) {
                var name = matches[j];
                name = name.slice(1);
                template = template.replace(matches[j], dataItem[name]);
            }
        }
        
        _builder.append(template);
    }
    
    _builder.append(this._footer);
    
    return _builder.toString();
}

/*function Bibc$Client$MarkupBuilder$itemDataBound()
{
    alert('test');
}*/


// Class PROTOTYPE
Bibc.Client.MarkupBuilder.prototype = 
{
    get_header:         Bibc$Client$MarkupBuilder$get_header,
    set_header:         Bibc$Client$MarkupBuilder$set_header,
    get_footer:         Bibc$Client$MarkupBuilder$get_footer,
    set_footer:         Bibc$Client$MarkupBuilder$set_footer,
    get_itemTemplate:   Bibc$Client$MarkupBuilder$get_itemTemplate,
    set_itemTemplate:   Bibc$Client$MarkupBuilder$set_itemTemplate,
    bind:               Bibc$Client$MarkupBuilder$bind,
    _generate:          Bibc$Client$MarkupBuilder$_generate,
    loadHeader:         Bibc$Client$MarkupBuilder$loadHeader,
    loadFooter:         Bibc$Client$MarkupBuilder$loadFooter,
    loadItemTemplate:   Bibc$Client$MarkupBuilder$loadItemTemplate
    //item_databound:     Bibc$Client$MarkupBuilder$itemDataBound
}

Bibc.Client.MarkupBuilder.registerClass('Bibc.Client.MarkupBuilder');




