
/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/internals/UserActions.js
*/

var UserActions = function() {
}


UserActions.prototype.BUFFER_CONTENT_TYPE = 'text/javascript';
UserActions.prototype.BUFFER_URL =          '/ft/internals/resources/buffer/UserActions.asp';


UserActions.prototype.init = function() {
	this.editIcons =   Element.parseSelector('DIV.editUser', 'wsod');
	this.deleteIcons = Element.parseSelector('DIV.deleteUser', 'wsod');

	Events.add(this.editIcons, 'click', this.editUser, this);
	Events.add(this.deleteIcons, 'click', this.deleteUser, this);
}


UserActions.prototype.editUser = function(ev, el) {
	var parentTable = Element.getParent(el, 'table');

	var querystring = [ 'username=', el.getAttribute('username'), '&role=', parentTable.getAttribute('role') ].join('');

	location.href = 'userDetails.asp?' + querystring;
}


UserActions.prototype.deleteUser = function(ev, el) {
	this.currentRow = Element.getParent(el, 'TR');

	var confirmTheDeleteRequest = confirm('To delete this user, press ok.');

	if (confirmTheDeleteRequest) {
		var inputs = {
			 'action':   'delete'
			,'userHash': el.getAttribute('userHash')
			,'userName': el.getAttribute('username')
		};

		this.completeAction(inputs);
	}
	else {
		this.currentRow = null;
	}
}


UserActions.prototype.completeAction = function(oArgs) {
	oArgs = oArgs || {};

	var serializedData = Common.getSerializer().serialize(oArgs);

	var contentBuffer = Common.getContentBuffer();
		contentBuffer.abortRequests();
		contentBuffer.load(
			{
				 contentType: this.BUFFER_CONTENT_TYPE
				,context:     this
				,data:        { serializedData:serializedData }
				,onload:      this.handleResults
				,onerror:     this.handleError
				,preventEval: true
				,url:         this.BUFFER_URL
			}
		);
}


UserActions.prototype.handleResults = function(cb) {
	var deserializedResults = Common.getSerializer().deserialize(cb.getResult());
	// console.log(deserializedResults);

	if (deserializedResults.isLocked) {
		Element.remove(this.currentRow);

		this.currentRow = null;
	}
}


UserActions.prototype.handleError = function(cb) {
	var deserializedResults = Common.getSerializer().deserialize(cb.getResult());
	// console.log(deserializedResults);

	this.currentRow = null;
}

/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/modules/markets/marketIndices.js
*/
var MarketIndices = function() {
}

MarketIndices.prototype.BUFFER_URL = SiteRules.getURL('/resources/buffer/markets/getMarketIndices.asp');

MarketIndices.prototype.init = function() {
    this._symbolArray = [];

    var chartHolder = WSDOM.Element.parseSelector('div.chartContainer', 'wsod', 'first');
    //var contentHolder = WSDOM.Element.parseSelector('div.contentHolder', 'wsod', 'first');

    this._chartLoadingOverlay = new LoadingOverlay(chartHolder);
    //this._contentLoadingOverlay = new LoadingOverlay(contentHolder);

    WSDOM.Events.add(WSDOM.Element.parseSelector('input.index', 'wsod'), 'click', this.addComparisons, this);
    //WSDOM.Events.add(WSDOM.Element.parseSelector('a.marketsType', 'wsod'), 'click', this.initBuffer, this);

    var elCheckBoxes = Element.parseSelector('input.index', 'wsod');

    for (var i = 0; i < elCheckBoxes.length; i++) {
        if (elCheckBoxes[i].checked) {
            this._symbolArray.push({ symbol: elCheckBoxes[i].value, element: elCheckBoxes[i], display: elCheckBoxes[i].getAttribute("display") })
        }
    }
}

MarketIndices.prototype.addComparisons = function(e, el) {
    var aSymbols = [];

    if (el.checked) {
        this._symbolArray.push({ symbol: el.value, element: el, display: el.getAttribute("display") })
    } else {
        for (var i = 0; i < this._symbolArray.length; i++) {
            if (el.value == this._symbolArray[i].symbol) {
                this._symbolArray.splice(i, 1);
                break;
            }
        }
    }

    if (this._symbolArray.length < 1) {
        this._symbolArray.push({ symbol: el.value, element: el, display: el.getAttribute("display") });
        el.checked = true;
        return;
    } else if (this._symbolArray.length > 4) {
        var oFirstBox = this._symbolArray.shift();
            oFirstBox.element.checked = false;
    }

    for (var j = 0; j < this._symbolArray.length; j++) {
        aSymbols.push(this._symbolArray[j].symbol);
    }
    
    var cb = this.getContentBuffer();
    this._chartLoadingOverlay.showLoading();

    cb.abortRequests();
    var conn = cb.load({
        debug: true,
        url: this.BUFFER_URL,
        method: "post",
        contentType: "text/javascript",
		preventEval: true,
        context: this,
        data: {
        type: 'chartOnly',
            comparisons: aSymbols
        },
        onload: this.comparisonReturn
    })
}

MarketIndices.prototype.comparisonReturn = function(cb) {
    var oResults = Common.getSerializer().deserialize(cb.getResult()),
        chartHolder = WSDOM.Element.parseSelector('div.chartHolder', 'wsod', 'first');

    this.img = new Image();
    this.img.src = oResults.oChart.fileName;
    this.oLineColors = Common.getSerializer().deserialize(oResults.oChart.lineColors);

    WSDOM.Events.add(this.img, 'load', this.loadImage, this);
}

MarketIndices.prototype.loadImage = function() {
    var img = WSDOM.Element.parseSelector('img.chartImage', 'wsod', 'first'),
        legendHolder = WSDOM.Element.parseSelector('div.chartLegend', 'wsod', 'first'),
        aHTML = [];

    img.src = this.img.src;


    for (var i=0, bgColor; i < this._symbolArray.length; i++) {
        bgColor = this.oLineColors[this._symbolArray[i].symbol];

        aHTML.push(
            '<div class="legendHolder">',
                '<div class="legendKey" style="background-color:#',bgColor,'"></div>',
                '<div class="legendDisplay">', this._symbolArray[i].display, '</div>',
            '</div>'
        )
    }

    WSDOM.Element.setHTML(legendHolder, aHTML.join(''))

    this._chartLoadingOverlay.hideLoading();
}

MarketIndices.prototype.getContentBuffer = function() {
    var cb = new ContentBuffer();

    this.getContentBuffer = function() {
        return cb;
    }

    return this.getContentBuffer();
}

/*
MarketIndices.prototype.initBuffer = function(e, el) {
    if (WSDOM.Element.hasClass(el, 'selected')) {
        return;
    }

    var sType = el.getAttribute('type'),
        cb = this.getContentBuffer();

    WSDOM.Element.removeClass(WSDOM.Element.parseSelector('a.marketsType', 'wsod'), 'selected');
    WSDOM.Element.addClass(el, 'selected');

    this._contentLoadingOverlay.showLoading();

    cb.abortRequests();
    var conn = cb.load({
        debug: true,
        url: this.BUFFER_URL,
        method: "post",
        contentType: "text/html",
        context: this,
        data: {
            type: sType
        },
        onload: this.bufferReturn    
    })
}

MarketIndices.prototype.bufferReturn = function(cb) {
    var oResults = new Serializer().deserialize(cb.getResult()),
        contentHolder = WSDOM.Element.parseSelector('div.contentHolder', 'wsod', 'first');

    WSDOM.Element.setHTML(contentHolder, oResults);
    WSDOM.Events.add(WSDOM.Element.parseSelector('input.index', 'wsod'), 'click', this.addComparisons, this);
    
    this._contentLoadingOverlay.hideLoading();
}
*/



/*
FILE CONCAT ADD FILE
PATH: /ft/resources/client/events.draggable.js
*/
EventManager.prototype.draggable = function(oArgs) {
            
	var ret = {};
	var self = this;
	
	var newUp = function() {
		self.remove(self.dragEvent);
		self.remove(self.upEvent);

		self.dragEvent = null;
		self.upEvent = null;
		oArgs.up.apply(this, arguments);
	}
	
	var newMove = function () {
		
		oArgs.move.apply(oArgs.context, arguments);

		if(!self.upEvent) {
			self.upEvent = self.add({
				element:arguments[1]
				,type:"mouseup"
				,handler:newUp
				,context:oArgs.context
			});
		}
	}

	var move = function() {
		if(!self.dragEvent){
			self.dragEvent = self.add({
				element:document
				,type:"mousemove"
				,handler:newMove
				,context:oArgs.context
			});
		}
	}

	var newDown = function() {
		oArgs.down.apply(this,  arguments);
		move();
	}
	
	var down = this.delegate(oArgs.parent, "mousedown", {

		selector: oArgs.selector
		,handler : newDown
		,context : oArgs.context
	});
	
	ret.down = down;

	if(oArgs.over) {
				
		var over = this.delegate(oArgs.parent, "mouseover", {
		
			 selector: oArgs.selector
			,handler : oArgs.over
			,context : oArgs.context
			,dynamicEvent : oArgs.dynamicEvent
		});
		
		ret.over = over;
	}

	return  ret;
}
