﻿/// <reference path="../ListItems.js"/>
//Javascript Dataset, Repeater v1.0 [Repeat data based on template] last build: 19/10/2008
//Copyright by Mahdi Yousefi,2008 All rights reserved, Tini.IR
//Use free => "just if do not remove my name: Mahdi Yousefi"
var dataset = function(ID, headerSort) {
    this.id = ID;
    this.list = new generic.list();
    this.load = false;
    this.headerSort = headerSort || false;
};
dataset.prototype.loadTemplate = function() {
    if (!this.load) {
        var bx = document.getElementById(this.id);
        this.setTemplate(bx.innerHTML);
        this.load = true;
    };
};
dataset.prototype.setSort = function(sortField, sortDirection) {
    this.sort = {
        field: sortField,
        direction: sortDirection
    };
};
dataset.prototype.setTemplate = function(newTemplate) {
    this.template = { content: newTemplate, header: "", footer: "", row: "", altrow: "", empty: "", loading: "", sortasc: "", sortdesc: "" };
    for (key in this.template) {
        if (key != "content") {
            this.template[key] = this.findTagContent(this.template.content, key);
        };
    };
};
dataset.prototype.findTagContent = function(content, tagName) {
    var result, beginIndex, endIndex, length;
    result = "";
    beginIndex = content.indexOf("<!--" + tagName + "-->");
    if (beginIndex >= 0) {
        endIndex = content.indexOf("<!--end-" + tagName + "-->");
        beginIndex = beginIndex + (7 + tagName.length);
        result = content.substring(beginIndex, endIndex);
    };
    return result;
};
dataset.prototype.setData = function(jsonData, rebuild){
    this.list.clear();
    this.list.addRange(jsonData);
    if(rebuild){
        this.build();
    };
};
dataset.prototype.getTemplate = function(index, item) {
    var myregexp;
    var hasAlt = (this.template.altrow != "");
    var result = (hasAlt && ((index % 2) == 1)) ? this.template.altrow : this.template.row;
    for (key in item) {
        myregexp = new RegExp();
        myregexp.compile("eval/" + key + "/", "g");
        result = result.replace(myregexp, item[key]);
    };
    myregexp = new RegExp();
    myregexp.compile("dataset/index/", "g");
    result = result.replace(myregexp, index);
    return result;
};
dataset.prototype.renderItem = function(index,item){
    return this.getTemplate(index,item);
};
dataset.prototype.getHeaderTemplate = function() {
    var tmp = this.template.header;
    if (this.sort) {
        var reg = new RegExp();
        reg.compile("<!--sort-" + this.sort.field + "-->");
        var str = (this.sort.direction == "asc") ? this.template.sortasc : this.template.sortdesc;
        tmp = tmp.replace(reg, str);
    };
    return tmp;
};
dataset.prototype.renderHeader = function() {
    return this.getHeaderTemplate();
};
dataset.prototype.build = function() {
    this.loadTemplate();
    var htmlContent = "";
    var iloop = 0;
    if (this.list.items.length > 0) {
        for (iloop = 0; iloop < this.list.items.length; iloop++) {
            htmlContent += this.renderItem(iloop, this.list.items[iloop]);
        };
        htmlContent = this.renderHeader() + htmlContent + this.template.footer;
    } else {
        htmlContent = this.template.empty;
    };
    document.getElementById(this.id).innerHTML = htmlContent;
};
dataset.prototype.startLoading = function() {
    this.loadTemplate();
    document.getElementById(this.id).innerHTML = this.template.loading;
};
dataset.prototype.count = function() {
    return this.list.items.length;
};
dataset.prototype.endLoading = function() {
    this.build();
};

