/*
=head1 NAME

takkle.view

=head1 DESCRIPTION

Base class for all views

=head1 INHERITS FROM

takkle

=head1 METHODS

=over 4

*/

dojo.provide( 'takkle.view' );
dojo.declare( 'takkle.view', takkle, {

/*
=item * obj = new( params )

=back

*/
	//buttonHolder: [],
	//buttonHolderProps: [],
	buttonsEnabled: false,
    constructor: function ( params ) {
        this.params = params;

    },
	// should behave the same as $c->uri_for
    uriFor: function() { // any better ideas?
        var args = [];
        for (var idx = 0; idx < arguments.length; idx++) {
            args.push(arguments[idx]);
        }
        var last = args[args.length - 1];
        var query;
        if (typeof last == 'object') {
            args = args.slice(0, args.length-1);
            query = dojo.objectToQuery(last);
        }
        var url = args.join('/');
        if (query) { url += '?' + query; }
        return url;
    },
	hidePopup: function( params ) {
		PopupManager.close_popup();
	},
	showElement: function( params ) {
		var container = dojo.byId(params.elementId);
		dojo.removeClass(container, 'hidden');
	},
	hideElement: function( params ) {
		var container = dojo.byId(params.elementId);
		dojo.addClass(container, 'hidden');
	},
	hideLoaderPopup: function( params ) {
		PopupManager.hide_loader_popup(params.message);
	},
	showLoaderPopup: function( params ) {
		PopupManager.loader_popup(params.message);
	},
	showErrorPopup: function( params ) {
		PopupManager.show_message_and_hide({ message: params.message });
	},
	getObjectFromProps: function( div, props_array ) {
		var props = {};
		for (var i = 0;i < props_array.length; i++) {
			props[props_array[i]] = div.getProperty(props_array[i]);
		}
		return props;
	},
	getParentElementByClass: function(el,class_name) {
		var new_el = el.getParent();
		if (new_el.hasClass(class_name)) return new_el;
		return this.getParentElementByClass(new_el,class_name);
	},
	enableButtons: function() {
		this.buttonsEnabled = true;
	},
	disableButtons: function() {
		this.buttonsEnabled = false;
	},
	pageIsBusy: function() {
		return this.buttonsEnabled ? false : true;
	},
	getCheckedValue: function(rdo) {
		var val = '';
		if (!rdo) { return val; }
		for (var i = 0;i< rdo.length; i++) {
			var item = rdo[i];
			if (item.checked) { val = item.value; }
		}
		return val;
	},
/*
		this.buttonHolderProps.each(function(the_el) {
			var el = the_el.elem;
			var click_func = the_el.on_click;
			if (click_func) {
				el.onclick = click_func;
			} else {
				el.onclick = null;
			}
		});
	},
	loadButtons: function() {
		this.buttonHolder = $$('.ajaxButton');	
	},
	loadButton: function(outer_div) {
		var self = this;
		$ES('.ajaxButton',outer_div).each(function(el) {
			self.buttonHolder.push(el);
		});
	},
	disableButtons: function() {
		var self = this;
		this.buttonHolderProps = [];
		this.buttonHolder.each(function(el) {
			var my_func = el.onclick;	
			el.onclick = function(e) { var ev = new Event(e); ev.stop(); return false; };
			self.buttonHolderProps.push({ elem: el, on_click: my_func });
		});
	},
*/
    applyTemplate: function( params, stash ) {
        if (!stash) { stash = {}; }

        stash.c = {};         
        stash.c.uri_for = function() {
            var args = [];
            for (var idx = 0; idx < arguments.length; idx++) {
                args.push(arguments[idx]);
            }
            var last = args[args.length - 1];
            var query;
            if (typeof last == 'object') {
                args = args.slice(0, args.length-1);
                query = dojo.objectToQuery(last);
            }
            var url = args.join('/');
            if (query) { url += '?' + query; }
            return url;
        };

        stash.isJemplate = true;
        stash.user = user;
        if (!stash.profile) { stash.profile = profile; }
        if (!stash.page) { stash.page = page; }

        // process the ids that were passed in
        if (params.elementIds) {
            stash.ids = {};
            for ( tKey in params.elementIds ) {
                var elementId = params.elementIds[tKey];        
                stash.ids[tKey] = elementId;
            }
        }

        // make the actual jemplate call
        var html = Jemplate.process(params.template, stash);
        if (params.debug) { console.debug(html); }

        var container = params.container;
        if (!container) {  return html; }

        if (params.append) {
            var tmpElement = document.createElement('div');
            tmpElement.innerHTML = html;
            container.appendChild(tmpElement);
        } else {
            container.innerHTML = html;
        }
        if (params.debug) {
            console.debug(container);
        }
        if (container.parentNode) {            
            if (params.parseWidgets) { dojo.widget.createWidget(container); }
            
            var returnElements = {};
            // safe to try and retrieve objects with ids
            for ( tKey in params.elementIds ) {
                var elementId = params.sectionId ? params.sectionId + '-' + params.elementIds[tKey] : params.elementIds[tKey];        
                var currentElement = document.getElementById(elementId);
                if (currentElement) {
                    returnElements[tKey] = currentElement;
                } else {
                    console.debug('not found: ' + elementId);
            	}
			}
            return returnElements;
        } else {
            return true;
        }        
    }       
});

/*
=back

=cut
*/

