function trim(s) {
    return s.replace(/^\s+|\s+$/, '');
}

function isValidEmail(str) {
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if (reg.test(str) == false) return false;
    else
    return true;
}

function isValidNum(str) {
    var reg = /^[0-9]+$/;
    if (reg.test(str) == false) return false;
    else
    return true;
}

function frmLoginValidate() {
    if (trim(document.frm.txtUserEmail.value) == "") {
        alert("Email ID is mandatory.");
        document.frm.txtUserEmail.focus();
        return false;
    } else if (trim(document.frm.txtUserEmail.value) != "") {
        if (isValidEmail(document.frm.txtUserEmail.value) == false) {
            alert("Invalid Email Format.");
            document.frm.txtUserEmail.focus();
            return false;
        }
    }
    if (trim(document.frm.txtUserPassword.value) == "") {
        ///document.getElementById('errMsg').innerHTML = '<br>&nbsp;Password is mandatory.';
        alert('Password is mandatory.');
        document.frm.txtUserPassword.focus();
        return false;
    }
    document.frm.page_action.value = "login";
    document.frm.submit();
}

function validateProfile() {
    if (trim(document.frm.textFirstName.value) == "") {
        alert("First Name is mandatory");
        document.frm.textFirstName.focus();
        return false;
    }
    if (trim(document.frm.textLastName.value) == "") {
        alert("Last Name is mandatory");
        document.frm.textLastName.focus();
        return false;
    }
    if (trim(document.frm.textPhone1.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone1.focus();
        return false;
    } else if (trim(document.frm.textPhone1.value) != "") {
        if (isValidNum(document.frm.textPhone1.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone1.focus();
            return false;
        } else if ((document.frm.textPhone1.value.length) < 3) {
            alert("Invalid Phone Number");
            document.frm.textPhone1.focus();
            return false;
        }
    }
    if (trim(document.frm.textPhone2.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone2.focus();
        return false;
    } else if (trim(document.frm.textPhone2.value) != "") {
        if (isValidNum(document.frm.textPhone2.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone2.focus();
            return false;
        } else if ((document.frm.textPhone2.value.length) < 3) {
            alert("Invalid Phone Number");
            document.frm.textPhone2.focus();
            return false;
        }
    }
    if (trim(document.frm.textPhone3.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone3.focus();
        return false;
    } else if (trim(document.frm.textPhone3.value) != "") {
        if (isValidNum(document.frm.textPhone3.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone3.focus();
            return false;
        } else if ((document.frm.textPhone3.value.length) < 4) {
            alert("Invalid Phone Number");
            document.frm.textPhone3.focus();
            return false;
        }
    }
}

function frmEditProfile() {
    if (validateProfile()) {
        document.frm.page_action.value = "update";
        document.frm.action = "aqc_profile.php";
        document.frm.submit();
        return true;
    } else {
        return false;
    }
}

function frmCreateProfile() {
    if (trim(document.frm.textFirstName.value) == "") {
        alert("First Name is mandatory");
        document.frm.textFirstName.focus();
        return false;
    }
    if (trim(document.frm.textLastName.value) == "") {
        alert("Last Name is mandatory");
        document.frm.textLastName.focus();
        return false;
    }
    if (trim(document.frm.textUserEmail.value) == "") {
        alert("Email Address is mandatory");
        document.frm.textUserEmail.focus();
        return false;
    } else if (trim(document.frm.textUserEmail.value) != "") {
        if (isValidEmail(document.frm.textUserEmail.value) == false) {
            alert("Invalid Email Address");
            document.frm.textUserEmail.focus();
            return false;
        }
    }
    if (trim(document.frm.textPhone1.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone1.focus();
        return false;
    } else if (trim(document.frm.textPhone1.value) != "") {
        if (isValidNum(document.frm.textPhone1.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone1.focus();
            return false;
        } else if ((document.frm.textPhone1.value.length) < 3) {
            alert("Invalid Phone Number");
            document.frm.textPhone1.focus();
            return false;
        }
    }
    if (trim(document.frm.textPhone2.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone2.focus();
        return false;
    } else if (trim(document.frm.textPhone2.value) != "") {
        if (isValidNum(document.frm.textPhone2.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone2.focus();
            return false;
        } else if ((document.frm.textPhone2.value.length) < 3) {
            alert("Invalid Phone Number");
            document.frm.textPhone2.focus();
            return false;
        }
    }
    if (trim(document.frm.textPhone3.value) == "") {
        alert("Phone is mandatory");
        document.frm.textPhone3.focus();
        return false;
    } else if (trim(document.frm.textPhone3.value) != "") {
        if (isValidNum(document.frm.textPhone3.value) == false) {
            alert("Phone must be in digits");
            document.frm.textPhone3.focus();
            return false;
        } else if ((document.frm.textPhone3.value.length) < 4) {
            alert("Invalid Phone Number");
            document.frm.textPhone3.focus();
            return false;
        }
    }
    if (trim(document.frm.txtPassword.value) == "") {
        alert("Password is mandatory");
        document.frm.txtPassword.focus();
        return false;
    }
    if (trim(document.frm.txtConfirmPassword.value) == "") {
        alert("Confirm Password is mandatory");
        document.frm.txtConfirmPassword.focus();
        return false;
    } else if (trim(document.frm.txtConfirmPassword.value) != "") {
        if (trim(document.getElementById('txtPassword').value) != trim(document.getElementById('txtConfirmPassword').value)) {
            alert("Confirm Password does  not match with Password");
            document.frm.txtConfirmPassword.focus();
            return false;
        }
    }
    if (!(document.frm.checkboxagree.checked)) {
        alert("Please Select Agreement");
        return false;
    } else if (document.frm.checkboxagree.checked) {
        document.frm.page_action.value = "insert";
        document.frm.action = "aqc_register.php";
        document.frm.submit();
        //return false;
    }
}

function frmSubmitModel() {
    if (trim(document.frm.txtModelName.value) == "") {
        alert("Model Name is mandatory");
        document.frm.txtModelName.focus();
        return false;
    }
    if (trim(document.frm.txtDesc.value) == "") {
        alert("Please provide description");
        document.frm.txtDesc.focus();
        return false;
    }
    if (trim(document.frm.fileModel.value) == "") {
        alert("Please select model document");
        document.frm.fileModel.focus();
        return false;
    }
    document.frm.page_action.value = "insert";
    document.frm.action = "aqc_submitmodel.php";
    document.frm.submit();
}

function fnSample() {
    document.frm.action = 'aqc_SampleModels.php';
    document.frm.submit();
}

function fnNewModel() {
    if (document.frm.hdnUserId.value == '') {
        var answer = confirm("Please login first before you submit your Model." + "\n" + "Would you like to register now?");
        if (answer) {
            document.frm.action = "aqc_account.php";
            document.frm.submit();
        } else {
            document.frm.txtUserEmail.focus();
            return false;
        }
    } else {
        document.frm.action = "aqc_SubmitModel.php";
        document.frm.submit();
    }
}

function show_monthly_table(monthly_div, data) {
    var csv_data = jQuery.csv()(data);
    var table = "<table border=\"0\" width=\"100%\" class=\"performance\" cellspacing=\"2\">";
    table += "<tr><td colspan=\"14\" align=\"left\"><b>Performance Net of Fees</b></td></tr>";
    // titles row
    table += "<tr><th>Year</th><th>Jan</th><th>Feb</th><th>Mar</th><th>Apr</th><th>May</th><th>Jun</th><th>Jul</th><th>Aug</th><th>Sep</th><th>Oct</th><th>Nov</th><th>Dec</th><th>YTD</th></tr>";
    var date;
    var returns = 0;
    var ytd_returns = 0;
    var last_year = 0;
    var last_month = 0;
    var table_data = new Array();
    var year_counter = 0;
    var row_data = [];
    for (var i = 0; i < csv_data.length; i++) {
        date = new Date(csv_data[i][0]);
        returns = (csv_data[i][1] * 1);
        if (last_year != date.getFullYear()) {
            row_data = new Array(13);
            table_data[year_counter++] = row_data;
            row_data[0] = date.getFullYear();
            for (j = 1; j < 13; j++) {
                row_data[j] = 0;
            }
        }
        row_data[date.getMonth() + 1] = returns;
        last_year = date.getFullYear();
    }
    for (var i = table_data.length - 1; i >= 0; i--) {
        var y2d = 0;
        row_data = table_data[i];
        if (i % 2 == 0) {
            trclass = "even";
        } else {
            trclass = "odd";
        }
        table += "<tr class=" + trclass + " ><td><B>" + row_data[0] + "</B></td>";
        for (var j = 1; j < row_data.length; j++) {
            if (row_data[j] == 0) {
                table += "<td >&nbsp;</td>";
            } else {
                var x = row_data[j] * 100;
                table += "<td>" + x.toFixed(2) + "% </td>";
                y2d = y2d + x;
            }
        }
        table += "<td><B>" + y2d.toFixed(2) + "%</B></td>";
        table += "</tr>";
    }
    //alert(table_data);
    table += "</table>";
    document.getElementById(monthly_div).innerHTML = table;
}
// ?a=07&b=1&c=2010&d=7&e=20&f=2010&g=d&s=%5EGSPC&ignore=.csv

function get_other_index_data(symbol, fromDate, toDate, dorm) {
    var yahooFinanceQuery = "?a=" + encodeURIComponent(lpad(fromDate.getMonth(), 2, "0")) + "&b=" + encodeURIComponent(lpad(fromDate.getDate(), 2, "0")) + "&c=" + encodeURIComponent(fromDate.getFullYear()) + "&d=" + encodeURIComponent(lpad(toDate.getMonth(), 2, "0")) + "&e=" + encodeURIComponent(lpad(toDate.getDate(), 2, "0")) + "&f=" + encodeURIComponent(toDate.getFullYear()) + "&g=" + dorm // "d"ay "w"eek "m"onth resolution
    + "&s=" + encodeURIComponent(symbol) + "&ignore=.csv";
    var callback =

    function (data) {
        var results = data.query.results;
        var t_date = null;
        var t_price = null;
        var t_prev_price = null;
        var c_returns = 1000;
        var rs = [];
        var minValue = 0;
        var maxValue = 0;
		var len = results.row.length - 1;

        for (i = len; i >= 0; i--) {
            t_prev_price = t_price;
            row = results.row[i];
            r = [];
            for (var col in row) {
                if (row.hasOwnProperty(col)) {
                    r.push(row[col]);
                }
            }
           // t_date = new Date(r[0]);
			//t_date.setDate(t_date.getDate() + 1);
			 t_date = Date.parseExact(r[0], "yyyy-MM-dd");
            t_price = r[4] * 1;

			if (i == len) {
				rs.push([t_date, 1000]);
			}

            if (t_prev_price == null) {
                continue;
            }
            //c_returns =  c_returns * (1 + ((t_price - t_prev_price) / t_prev_price));
            c_returns = c_returns + (t_price - t_prev_price);
			if (c_returns) {
            rs.push([t_date, c_returns]);
			}
        }
        symbol_returns = rs;
    };
    $.ajax({
        url: 'yql.php' + yahooFinanceQuery,
        dataType: 'json',
        success: callback,
        async: false
    });
    //	pausecomp(3000);
    //	alert('returning');
    return symbol_returns;
}

function pausecomp(millis) {
    var date = new Date();
    var curDate = null;
    do {
        curDate = new Date();
    }
    while (curDate - date < millis);
}

function lpad(ContentToSize, PadLength, PadChar) {
    var str = ContentToSize.toString();
    while (str.length < PadLength) {
        str = '0' + str;
    }
    return str;
}

function on_csv_load(graph_title, graph_div, data) {
    var csv_data   = jQuery.csv()(data);
    var graph_data = [];
    var returns    = 0;
    var c_returns  = 1000;
    var begin_date = new Date(csv_data[0][0]);

    //begin_date.setDate(begin_date.getDate() - 1);

    graph_data[0] = [begin_date, c_returns];
    var minValue  = graph_data[0][1];
    var maxValue  = graph_data[0][1];

    for (var i = 1; i < csv_data.length; i++) {
        returns = (csv_data[i][1] * 1); // convert to number
        c_returns = c_returns * (1 + returns);
        graph_data[i] = [new Date(csv_data[i][0]), c_returns];
        if (c_returns < minValue) {
            minValue = c_returns;
        }
        if (c_returns > maxValue) {
            maxValue = c_returns;
        }
    }

    var snp_data = get_other_index_data('^GSPC', graph_data[0][0], graph_data[graph_data.length - 1][0], (graph_title.indexOf("Daily") > -1 ? "d" : "m"));
    for (var i = 0; i < snp_data.length; i++) {
        c_returns = snp_data[i][1];
        if (c_returns < minValue) {
            minValue = c_returns;
        }
        if (c_returns > maxValue) {
            maxValue = c_returns;
        }
    }

    var graph_min = (25 * (Math.round(minValue / 25) - 1)) * 1;
    var graph_max = (25 * (Math.round(maxValue / 25) + 1)) * 1;
    var diff = (graph_max - graph_min);
    diff = diff / 3;
    diff = Math.round(diff / 25) * 25;
    //alert (minValue + " : " + maxValue + " : " + graph_min + " : " + graph_max);
    var my_ticks = [];
    my_ticks[0] = graph_min;
    my_ticks[1] = graph_min + diff;
    my_ticks[2] = graph_max - diff;
    my_ticks[3] = graph_max;
    main_title = "<b>" + graph_title + " (Growth of $1000)</b>";
    //alert(my_ticks);
    // autoscale:true, min: graph_min, max: graph_max

    plot1 = $.jqplot(graph_div, [graph_data, snp_data], {
        title: main_title,
        legend: {
            show: true,
            location: 'nw',
            xoffset: 3,
            yoffset: 3
        },
        seriesDefaults: {
            showMarker: false
        },
        series: [{
            label: 'AQC'
        }, {
            label: 'S&P 500'
        }],
        axes: {
            xaxis: {
                renderer: $.jqplot.DateAxisRenderer,
                rendererOptions: {
                    tickRenderer: $.jqplot.CanvasAxisTickRenderer
                },
                tickOptions: {
						showGridline:false,//for grid
                    formatString: '%b %#d, %Y',
                    fontSize: '8pt',
                    fontFamily: 'Tahoma',
                    angle: -30
                },
                min: graph_data[0][0],
                max: graph_data[graph_data.length - 1][0]
            },
            yaxis: {
                tickOptions: {
					showGridline:false,//for grid
                    fontSize: '8pt',
                    formatString: '%d'
                },
                ticks: my_ticks
            }
        },
        highlighter: {
            sizeAdjust: 2,
            tooltipLocation: 'n',
            useAxesFormatters: false,
            show: false,
            formatString: 'Hello %s dayglow %d'
        }
    });
}

function fnChkLogin() {
    var answer = confirm("Login to acess this page." + "\n" + "Would you like to Login now?");
    if (answer) {
        document.frm.action = "index.php";
        document.frm.submit();
    } else {
        return false;
    }
}
