var JVSTOCK = (function($){ return function(data){ var that = this; $.each(data, function(i, item){ if(item == '0' || item == '1') item = parseInt(item); that[i] = ko.observable(item); }); if(typeof data.moving != 'undefined'){ this.moving = ko.observableArray(data.moving); }else{ this.moving = ko.observableArray([]); } if(typeof data.ema != 'undefined'){ this.ema = ko.observableArray(data.ema); }else{ this.ema = ko.observableArray([]); } if(typeof data.indicator != 'undefined'){ this.indicator = ko.observableArray(data.indicator); }else{ this.indicator = ko.observableArray([]); } if(typeof data.overlay != 'undefined'){ this.overlay = ko.observableArray(data.overlay); }else{ this.overlay = ko.observableArray([]); } this.initValue = function(el, default_value){ if($(el).data('toggle') == 'ys-radio'){ $(el).children().each(function(){ var value = $(this).val(); if(default_value == value){ $(this).addClass('btn-success'); } }); $(el).children().click(function(){ var $item = $(this); $item.parent().children().removeClass('btn-success'); $item.addClass('btn-success'); that[el.replace('#jvys_','')]($item.val()); that.getChart(); }); }else{ $(el).children().each(function(){ var value = $(this).val(); if (default_value.indexOf(value) >= 0) { $(this).addClass('btn-success'); } }); $(el).children().click(function(){ var $item = $(this); if (default_value.indexOf($item.val()) < 0) { $item.addClass('btn-success'); that[el.replace('#jvys_','')].push($item.val()); }else{ $item.removeClass('btn-success'); that[el.replace('#jvys_','')].remove($item.val()); } that.getChart(); }); } } this.initValue('#jvys_range', this.range()); this.initValue('#jvys_type', this.type()); this.initValue('#jvys_scale', this.scale()); this.initValue('#jvys_size', this.size()); this.initValue('#jvys_moving', this.moving()); this.initValue('#jvys_ema', this.ema()); this.initValue('#jvys_indicator', this.indicator()); this.initValue('#jvys_overlay', this.overlay()); this.getChart = function(){console.log(); var query = {}; query.s = this.trim(this.stock_id().split(",")[0]); query.t = this.range(); query.q = this.type(); query.l = this.scale(); query.z = this.size(); var p = new Array(); if(this.moving().length){ p = $.merge(p, this.moving()); } if(this.ema().length){ p = $.merge(p, this.ema()); } if(this.overlay().length){ p = $.merge(p, this.overlay()); } if(p.length){ query.p = p.join(','); } if(this.indicator().length){ query.a = this.indicator().join(','); } $('#jvstockdetail_chart_img').attr('src', 'http://chart.finance.yahoo.com/z?' + this.http_build_query(query)); } this.http_build_query = function(formdata, numeric_prefix, arg_separator){ var value, key, tmp = []; var _http_build_query_helper = function (key, val, arg_separator) { var k, tmp = []; if (val === true) { val = "1"; } else if (val === false) { val = "0"; } if (val != null) { if(typeof val === "object") { for (k in val) { if (val[k] != null) { tmp.push(_http_build_query_helper(key + "[" + k + "]", val[k], arg_separator)); } } return tmp.join(arg_separator); } else if (typeof val !== "function") { return that.urlencode(key) + "=" + that.urlencode(val); } else { alert('There was an error processing for http_build_query().'); } } else { return ''; } }; if (!arg_separator) { arg_separator = "&"; } for (key in formdata) { value = formdata[key]; if (numeric_prefix && !isNaN(key)) { key = String(numeric_prefix) + key; } var query=_http_build_query_helper(key, value, arg_separator); if(query !== '') { tmp.push(query); } } return tmp.join(arg_separator); } this.urlencode = function(str) { str = (str + '').toString(); return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); } this.trim = function(str, charlist) { var whitespace, l = 0, i = 0; str += ''; if (!charlist) { // default list whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000"; } else { // preg_quote custom list charlist += ''; whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1'); } l = str.length; for (i = 0; i < l; i++) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(i); break; } } l = str.length; for (i = l - 1; i >= 0; i--) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(0, i + 1); break; } } return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''; } } })($JVYS);