﻿// ajax.js
// S D'Agostino
// 10 mar 2009



///////////////////////////////////////////////////////////////////////////////////////////
// New for cld 
// april 2009
function SaveImpactPercentage(projectID) {
    //alert(document.form1.elements.length);
    var myForm = document.aspnetForm;
    var dataString = '';
    
    for (i = 0; i < myForm.elements.length; i++) {
        elem = myForm.elements[i];

        if (Left(elem.name, 13) == "radImpactEval") {
            if (elem.checked) {
                //alert(elem.value + ' | ' + stripLeft(elem.name, 14));
                dataString += stripLeft(elem.name, 14) + '|' + elem.value + '~';
            }
        }
    }
    //alert(dataString);
    doAjax(dataString, projectID, 'impact', 'impact-evel-wrapper')
}


//////////////////////////////////////////////////////////////////////////////////////////////////

function doAjax(strData, projectID, doWhat, thediv) {

    var page_request = false;
    var date = new Date(); var timestamp = date.getTime();
    var ajaxURL = 'ajax/ajax.aspx?';
    var div = thediv;
   //alert(div);

    var arr = {
        'dowhat': doWhat,
        'data': strData,
        'projectID': projectID,
        'time': timestamp
    }
    var data = ued_encode(arr);
    document.getElementById(div).innerHTML = "please wait...";
    
    if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest()
    else if (window.ActiveXObject) { // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch (e) {
            try {
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e) {
                alert('sorry, your browser does not support ajax - please upgrade to a newer version');
            }
        }
    } else return false

    page_request.onreadystatechange = function() {
        if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) {
            var return_array = page_request.responseText.split(",");
            document.getElementById(div).innerHTML = return_array;
            return true;
        }
    }

    strUrl = ajaxURL + data;

    //alert(strUrl)
    //document.write(strUrl);
    page_request.open('GET', strUrl, true);
    page_request.send(null);
}





////////////////////////////////////////////////////////////////////////////////////////

//Misc Functs

function stripLeft(str, n){
    if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(n, String(str).length);
}



function getvalue(obj) 
{
    alert(obj.value);
}

////////////////////////////////////////////////////////////
function showHelp(elem)
{
    //alert(elem);
    document.getElementById(elem).style.display = 'block';
}
function hideHelp(elem) {
    //alert(elem);
    document.getElementById(elem).style.display = 'none';
}
////////////////////////////////////////////////////////////////
//file / resource uplaod & links

// ajax.js
// S D'Agostino
// 17 July 2008
//    DoAjax('DelRes', resID, 'content-right', planID);
function DoAjax(doWhat, el, div, pID) {
    var val;
    var saveData = '';
    var page_request = false;
    var date = new Date(); var timestamp = date.getTime();
    var ajaxURL = 'ajax/ajax.aspx?';
    
    switch (doWhat) {

        case 'insert':
        case 'delete':
        case 'showedit':
        case 'update':
        case 'ShowResource':
            val = 'NULL';  //data arr in string
            saveData = el;
            break;

        case 'SaveEdit':
            val = 'NULL';  //data arr in string
            saveData = el;
            break;

        case 'showedit':
            val = el;
            break;

        default:
            alert('doWhat not found!');
            return false;
            break;
    }

    var arr = {
        'dowhat': doWhat,
        'val': val,
        'time': timestamp
    }
    document.getElementById(div).innerHTML = "please wait...";
    var data = ued_encode(arr);

    if (window.XMLHttpRequest) // if Mozilla, Safari etc
        page_request = new XMLHttpRequest()
    else if (window.ActiveXObject) { // if IE
        try {
            page_request = new ActiveXObject("Msxml2.XMLHTTP")
        }
        catch (e) {
            try {
                page_request = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e) {
                alert('sorry, your browser does not support ajax - please upgrade to a newer version');
            }
        }
    } else return false

    page_request.onreadystatechange = function() {
        if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) {
            var return_array = page_request.responseText.split(",");
            document.getElementById(div).innerHTML = return_array;
            document.getElementById("resName").value = "";
            document.getElementById("resDesc").value = "";
            document.getElementById("resURL").value = "";
            if (doWhat == 'insert') { ShowMediaEditButton('Media added sucessfully') }
        }
    }
    strUrl = ajaxURL + data + '&' + saveData;
    //alert(strUrl)
    //document.write(strUrl);
    page_request.open('GET', strUrl, true);
    page_request.send(null);
}

//Del resource
function DelResource(projID, resID, resName) {
    Boxy.confirm("This will delete this resource from the system - this action cannot be undone\n Do you wish to delete?", function() 
        { 
            var arr = {
            'resID': resID,
            'projID': projID
            }

            var data = ued_encode(arr);
            DoAjax('delete', data, 'content-right'); }, 
        { title: 'Delete Resource?' });
    //var answer = confirm("This will delete this resource from the system - this action cannot be undone\n Do you wish to delete?");
    //if (answer != 1) return false;
    
}

// Save a new resource
function SaveResource(resourceID, resourceExt) {
    var resID = resourceID == null ? -1 : resourceID;
    var resExt = resourceExt == null ? "" : resourceExt;
    //alert(resID + " | " + resExt);
    
    var resType = $("input[name='resrad']:checked").val();
    var projID = $("[id$=PlanID]").attr("value");
    var resName = ValidateForm('resName', 'Please enter a name'); if (!resName) return false;
    var resDesc = ValidateForm('resDesc', 'Please enter a description'); if (!resDesc) return false;
    if (!document.getElementById('resRadio').checked && !document.getElementById('upRadio').checked) { alert('Please select \'link\' or \'upload\' '); return false; }
    if (resType == 1) // link
    {
        if (isValidURL(document.getElementById('resURL').value)) { resURL = trim(document.getElementById('resURL').value); }
        else { alert('Please enter a valid URL\n e.g http://ellp.net or www.ellp.net'); return false; }
    }
    else {
        resURL = "";
    }
    
    var arr = {
        'resName': resName,
        'resDesc': resDesc,
        'resUrl': resURL,
        'resType': resType,
        'projID': projID,
        'resID': resID,
        'resExt' : resExt
    }

    var data = ued_encode(arr);

    DoAjax('insert', data, 'content-right');
}

/////////////////
//edit resource
function EditResource(resID) {
    var arr = {
        'resID': resID,
        'projID': $("[id$=PlanID]").attr("value")
    }
    var data = ued_encode(arr);
    DoAjax('showedit', data, 'content-right');
}

function CancelEdit(resID) {
    var arr = {
        'resID': resID,
        'projID': $("[id$=PlanID]").attr("value")
    }
    var data = ued_encode(arr);
    DoAjax('ShowResource', data, 'content-right');
}
function SaveEdit(resID, projID, resType) {
    var resURL = '';
    var resName = ValidateForm('editName', 'Please enter a name'); if (!resName) return false;
    var resDesc = ValidateForm('editDesc', 'Please enter a description'); if (!resDesc) return false;
    if (resType == 1) //link do check url
    {
        if (isValidURL(document.getElementById('editURL').value)) { resURL = trim(document.getElementById('editURL').value); }
        else { alert('Please enter a valid URL\n e.g http://ellp.net or www.ellp.net'); return false; }
        //alert(resURL);
    }
        var arr = {
        'projID': projID,
        'resID': resID,
        'resName': resName,
        'resDesc': resDesc,
        'resUrl': resURL,
        'resType': resType
    }

    var data = ued_encode(arr);
    //alert(data);
    DoAjax('update', data, 'content-right');
}

/////////////////

function ShowLink() {
    var resName = ValidateForm('resName', 'Please enter a name'); if (!resName) return false;
    var resDesc = ValidateForm('resDesc', 'Please enter a description'); if (!resDesc) return false;
    document.getElementById("admin-url").style.display = 'block';
    document.getElementById("admin-browse").style.display = 'none';
}

function ShowUpload() {
    var resName = ValidateForm('resName', 'Please enter a name'); if (!resName) return false;
    var resDesc = ValidateForm('resDesc', 'Please enter a description'); if (!resDesc) return false;
    document.getElementById("admin-url").style.display = 'none';
    document.getElementById("admin-browse").style.display = 'block';
}




//Misc Functs

function Left(str, n) {
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else
        return String(str).substring(0, n);
}

function ued_encode(arr, current_index) {
    var query = ""
    if (typeof current_index == 'undefined') current_index = '';

    if (typeof (arr) == 'object') {
        var params = new Array();
        for (key in arr) {
            var data = arr[key];
            var key_value = key;
            if (current_index) {
                key_value = current_index + "[" + key + "]"
            }

            if (typeof (data) == 'object') {
                if (data.length) { //List
                    for (var i = 0; i < data.length; i++) {
                        params.push(key_value + "[]=" + ued_encode(data[i], key_value)); //:RECURSION:
                    }
                } else { //Associative array
                    params.push(ued_encode(data, key_value)); //:RECURSION:
                }
            } else { //String or Number
                params.push(key_value + "=" + encodeURIComponent(data));
            }
        }
        query = params.join("&");
    } else {
        query = encodeURIComponent(arr);
    }

    return query;
}
/*Validation    */

//validation
function ValidateForm(element, errmsg, type) {
    var validate = (trim(document.getElementById(element).value) != "" && document.getElementById(element).value != null) ?
			encodeURIComponent(trim(document.getElementById(element).value)) : 'x';
    if (validate == 'x') {
        alert(errmsg);
        document.getElementById(element).focus();
        return false;
    }
    else {
        return validate;
    }
}
//email validation
function validate_email(field, alerttxt) {
    with (field) {
        apos = value.indexOf("@");
        dotpos = value.lastIndexOf(".");
        if (apos < 1 || dotpos - apos < 2)
        { alert(alerttxt); field.focus(); return false; }
        else { return true; }
    }
}
//url validation
function isValidURL(url) {

    var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;
    if (RegExp.test(url)) {
        return true;
    } else {
        return false;
    }
}

//date validation - lets through 31 where not allowed!
function validateDate(fld) {

    var RegExPattern = /^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$/;
    var errorMessage = 'Please enter valid date as day, month, and four digit year.\nYou may use a slash, hyphen or period to separate the values.\n\nFormat dd/mm/yyyy.';
    if ((fld.value.match(RegExPattern)) && (trim(fld.value) != '')) {
        //alert('Date is OK'); 
        return true;
    } else {
        alert(errorMessage);
        fld.focus();
        return false;
    }
}

function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g, "");
}
function setbg(who, color) {
    var txtcolor = '';
    var fontcolor = '';
    switch (color) {
        case 'in':
                
            txtcolor = 'white';
            fontcolor = '#000000';
            break;

        case 'out':
            txtcolor = '#9197a2';
            fontcolor = '#ffffff';
            break;

        default:
            txtcolor = '#9197a2';
            fontcolor = '#fff';
    }
    document.getElementById(who).style.background = txtcolor;
    document.getElementById(who).style.color = fontcolor;
}

// show the text boxes etc
function ShowTextBoxes() {
    //alert(document.getElementById("maintype").value);
    if (document.getElementById("cat").value == 'X') {
        document.getElementById("admin-textboxes").style.display = 'none';
    }
    else {
        document.getElementById("admin-textboxes").style.display = 'block';
    }
}
//GetObject the resourve==ce list for alert given category - called in sdagALN.cs
function PopulateResource(obj) {
    DoAjax('GetRes', obj.value, 'content-right');
    ShowTextBoxes();
}