// ----------------------------------------------------------------------------
//       File Name: enduser.js
//       Subsystem: enduser
//   Document Type: Javascript include file
//         Purpose: contains all non-page specific enduser page Javascript
// ----------------------------------------------------------------------------
var inside_check_mask = 0;

var p_sid = getQueryVariable('p_sid'); 

function utf8_len(str)
{
    var i, sz, len = 0;

    for (i = 0, sz = str.length; i < sz; i++) 
        if (str.charCodeAt(i) < 0x0080)
            len += 1;
        else if (str.charCodeAt(i) < 0x0800)
            len += 2;
        else
            len += 2;

    return(len);
}

// ----------------------------------------------------------------------------

function utf8_excess_chars(str, maxlen)
{
    var i, sz, len = 0; excess = 0;

    for (i = 0, sz = str.length; i < sz; i++)
    {
        if (str.charCodeAt(i) < 0x0080)
            len += 1;
        else if (str.charCodeAt(i) < 0x0800)
            len += 2;
        else
            len += 2;

        if (len > maxlen)
            excess += 1;
    }

    return(excess);
}

// ----------------------------------------------------------------------------

function is_furigana_string(str)
{
    var i, sz, c;

    for (i = 0, sz = str.length; i < sz; i++)
    {
        c = str.charCodeAt(i);

        if ((c >= 0x3041  &&  c <= 0x309E) || // hiragana
            (c >= 0x30A1  &&  c <= 0x30FE) || // full-width katakana
            (c == 0x2212) || (c == 0x2025) || // full-width hyphens
            (c == 0xFF0E) || (c == 0x0020) || // nakaguro, ' '
            (c >= 0x0030  &&  c <= 0x0039) || // '0' - '9'
            (c >= 0x0041  &&  c <= 0x005A) || // 'A' - 'Z'
            (c >= 0x0061  &&  c <= 0x007A) || // 'a' - 'z'
            (c == 0x0028) || (c == 0x0029) || // '('   ')'
            (c == 0x002C) || (c == 0x002E) || // ','   '.'
            (c == 0x0026) || (c == 0x002D) || // '&'   '-'
            (c == 0xFF0D) || (c == 0xFF06) || // full-width hypen and ampersand
            (c == 0xFF08) || (c == 0xFF09) || // full-width parenthesis
            (c == 0x3000))                    // full-width space
            continue;

        return(false);
    }

    return(true);
}

// ----------------------------------------------------------------------------

function submenu(code, items)
{
    this.code  = code;
    this.items = items;
}

// ----------------------------------------------------------------------------

function subitem(code, name)
{
    this.code = code;
    this.name = name;
}

// ----------------------------------------------------------------------------

function field_data(int_msg, reqd_msg, not_complete_msg, oversz_msg,
                    ascii_msg, email_msg, furigana_msg,
                    mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl,
                    email_expr, date_order, no_html_msg, pos_int_msg,
                    fld_too_mny_chars_msg, must_cont_valid_format_char_msg,                    
                    not_valid_format_char_msg, must_cont_valid_num_msg,
                    not_valid_num_msg, must_cont_valid_alphanum_msg,
                    not_valid_alphanum_msg, must_cont_valid_letter_msg,
                    not_valid_letter_msg, must_cont_valid_char_msg,
                    not_valid_char_msg, corr_fmt_is_msg)
{
    this.int_msg                           = int_msg;
    this.reqd_msg                          = reqd_msg;
    this.not_complete_msg                  = not_complete_msg;
    this.oversz_msg                        = oversz_msg;
    this.ascii_msg                         = ascii_msg;
    this.email_msg                         = email_msg;
    this.furigana_msg                      = furigana_msg;
    this.no_html_msg                       = no_html_msg;    
    this.pos_int_msg                       = pos_int_msg;
    this.fld_too_mny_chars_msg             = fld_too_mny_chars_msg;
    this.must_cont_valid_format_char_msg   = must_cont_valid_format_char_msg;
    this.not_valid_format_char_msg         = not_valid_format_char_msg;
    this.must_cont_valid_num_msg           = must_cont_valid_num_msg;
    this.not_valid_num_msg                 = not_valid_num_msg;
    this.must_cont_valid_alphanum_msg      = must_cont_valid_alphanum_msg;
    this.not_valid_alphanum_msg            = not_valid_alphanum_msg;
    this.must_cont_valid_letter_msg        = must_cont_valid_letter_msg;
    this.not_valid_letter_msg              = not_valid_letter_msg;
    this.must_cont_valid_char_msg          = must_cont_valid_char_msg;
    this.not_valid_char_msg                = not_valid_char_msg;
    this.corr_fmt_is_msg                   = corr_fmt_is_msg;
    
    // can't do a cfg_get in javascript, so store it in a javascript variable
    switch (date_order) 
    {
    case 0: // American
        this.dt_lbl     = new Array(mon_lbl, day_lbl, yr_lbl, hr_lbl, min_lbl);
        this.dt_sfx     = new Array('_mon', '_day', '_yr');
        break;
    case 1: // Japanese
        this.dt_lbl     = new Array(yr_lbl, mon_lbl, day_lbl, hr_lbl, min_lbl);
        this.dt_sfx     = new Array('_yr', '_mon', '_day');
        break;
    case 2: // European
        this.dt_lbl     = new Array(day_lbl, mon_lbl, yr_lbl, hr_lbl, min_lbl);
        this.dt_sfx     = new Array('_day', '_mon', '_yr');
        break;
    }

    email_expr = email_expr.replace(/^\s+|\s$/g,''); // trim any return characters or whitespace
    this.email_expr = new RegExp(email_expr ? email_expr : '.*');
}

// ----------------------------------------------------------------------------

function field(name, label, type, maxlen, flags)
{
    this.name   = name;
    this.label  = label;
    this.type   = type;
    this.maxlen = maxlen;

    // flags is a bitmask:
    //  0x0001  required
    //  0x0002  ascii only
    //  0x0004  must match email pattern
    //  0x0008  cannot contain HTML
    //  0x0010  valid furigana characters only
    //  0x0020  cannot contain < >
    //  0x0040  int must be greater than 0
    //  0x0080  field is a checkbox (unselected value doesn't show in post params)
    this.flags  = flags;
}

// ----------------------------------------------------------------------------

function _upd_submenu(menu, submenu, submenu_data, all_str)
{
    var i, j = 1, sz;

    submenu.length = 0;

    submenu.options[0]       = new Option();
    submenu.options[0].text  = all_str;
    submenu.options[0].value = '';

    for (i = 0, sz = submenu_data.length; i < sz; i++)
        if (submenu_data[i].code == menu.options[menu.selectedIndex].value)
        {
            for ( ; j <= submenu_data[i].items.length; j++)
            {
                submenu.options[j]       = new Option();
                submenu.options[j].text  = submenu_data[i].items[j-1].name;
                submenu.options[j].value = submenu_data[i].items[j-1].code;
            }

            break;
        }

    submenu.length        = j;
    submenu.selectedIndex = 0;
}

// ----------------------------------------------------------------------------

function _alp_onload(page, gridsort)
{
    if (document.grid)
    {
        if (document.grid.p_page)
            document.grid.p_page.selectedIndex = page - 1;
        if (document.grid.p_gridsort)
            document.grid.p_gridsort.value = gridsort;
    }
}

// ----------------------------------------------------------------------------

function _adp_print(url)
{
    window.open(url, 'print_answer', 'resizable,menubar,toolbar,scrollbars');
}

// ----------------------------------------------------------------------------

function _adp_email(url)
{
    window.open(url, 'email_answer', 'resizable,width=700,height=392');
}

// ----------------------------------------------------------------------------
// CDT_DATE and CDT_DATETIME components are processed as individual CDT_MENU
// fields

function _check_fields(form_name, fld_data, fields)
{
    var fld, i, j, numSet, str;
    var ws_exp      = new RegExp("(^\\s+|\\s*$)", "g");
    var strtok_exp  = new RegExp("%s");
    var numtok_exp  = new RegExp("%d");
    var valid_ascii = new RegExp("^[\x20-\x7e]+$");
    var no_html     = new RegExp("[<>]");
    
    with (fld_data) for (i = 0; (i < fields.length) && fields[i].type; i++)
    {
        if ((fields[i].type != 4) && (fields[i].type != 7))
            fld = eval('document.'+form_name+'.'+fields[i].name);

        switch (fields[i].type)
        {
            case 1: // CDT_MENU
                if ((fields[i].flags & 1) &&
                    (fld.length > 1) && (fld.selectedIndex < 1))
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld.focus();
                    return(false);
                }
                break;

            case 2: // CDT_BOOL
            case 8: // CDT_OPT_IN
                if ((fields[i].flags & 1) &&
                    !fld[0].checked && !fld[1].checked)
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld[0].focus();
                    return(false);
                }
                break;

            case 3: // CDT_INT
                fld.value = fld.value.replace(ws_exp, '');
                if (fld.value.length && isNaN(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+int_msg);
                    fld.focus();
                    return(false);
                }
                if (fields[i].flags & 0x40 && fld.value < 0)
                {
                    alert('\''+fields[i].label+'\' '+pos_int_msg);
                    fld.focus();
                    return(false);                     
                }

                // deliberate drop through

            case 5: // CDT_VARCHAR
            case 6: // CDT_MEMO
                if (fields[i].maxlen && (fields[i].maxlen < fld.value.length))
                {
                    str = oversz_msg.replace(strtok_exp, fields[i].label);
                    str = str.replace(numtok_exp, fields[i].maxlen);
                    str = str.replace(numtok_exp,
                                      fld.value.length - fields[i].maxlen);

                    alert(str);
                    fld.focus();
                    return(false);
                }

                if (fields[i].type != 3)
                    fld.value = fld.value.replace(ws_exp, '');

                if ((fields[i].flags & 1) && (fld.value.length == 0))
                {
                    alert('\''+fields[i].label+'\' '+reqd_msg);
                    fld.focus();
                    return(false);
                }

                // if not required and not set, don't do checks
                if ((fld.value.length == 0))
                    break;

                if ((fields[i].flags & 2) && !valid_ascii.test(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+ascii_msg);
                    fld.focus();
                    return(false);
                }

                if ((fields[i].flags & 4) && !email_expr.test(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+email_msg);
                    fld.focus();
                    return(false);
                }

                if ((fields[i].flags & 0x10) && !is_furigana_string(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+furigana_msg);
                    fld.focus();
                    return(false);
                }
                
                if (fields[i].flags & 0x20 && no_html.test(fld.value))
                {
                    alert('\''+fields[i].label+'\' '+ no_html_msg);
                    fld.focus();
                    return(false);
                }
                
                break;


            case 4: // CDT_DATETIME
            case 7: // CDT_DATE
                fld = new Array();

                fld[0] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[0]);
                fld[1] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[1]);
                fld[2] = eval('document.'+form_name+'.'+fields[i].name+dt_sfx[2]);

                if (fields[i].type == 4)
                {
                    fld[3] = eval('document.'+form_name+'.'+fields[i].name+'_hr');
                    fld[4] = eval('document.'+form_name+'.'+fields[i].name+'_min');
                }

                if (!(fields[i].flags & 1))  // not required
                {
                    for (j = numSet = 0; j < fld.length; j++)
                        numSet += (fld[j].selectedIndex > 0) ? 1 : 0;

                    if ((numSet > 0) && (numSet != fld.length))
                    {
                        // field is only partially filled out
                        alert('\''+fields[i].label+'\' '+not_complete_msg);
                        fld[0].focus();
                        return(false);
                    }

                    break;
                }

                for (j = 0; j < fld.length; j++)
                    if ((fld[j].selectedIndex < 1))
                    {
                        alert('\''+fields[i].label+' ('+dt_lbl[j]+')\' '+reqd_msg);
                        fld[j].focus();
                        return(false);
                    }

                break;
        }
    }

    return(true);
}

// ----------------------------------------------------------------------------

function _validate_acctinfo(userid, passwd1, passwd2, min_passwd_len, msgs)
{
    var msg = -1, fld;

    if (userid.value.indexOf(' ') != -1)
         msg = 0, fld = userid;

    if (userid.value.indexOf('\"') != -1)
         msg = 1, fld = userid;

    if (passwd1 && (passwd1.value != passwd2.value))
         msg = 2, fld = passwd1;

    if (passwd1 && (passwd1.value.length < min_passwd_len))
        msg = 3, fld = passwd1;

    if (msg != -1)
    {
        alert(msgs[msg]);
        fld.focus();
        fld.select();
        return(false);
    }

    return(true);
}

// ----------------------------------------------------------------------------

var cursor_set = false;

function _set_cursor()
{
    var i, j;

    if (cursor_set)
        return;

    cursor_set = true;

    if (document.location.href.indexOf('#') > -1)
        return;

    for (i = 0; i < document.forms.length; i++)
        for (j = 0; j < document.forms[i].length; j++)
           with (document.forms[i])
               if (elements[j].type && ((elements[j].type == 'text') || (elements[j].type == 'textarea')))
               {
                   elements[j].focus();
                   if (elements[j].value.length)
                       elements[j].select();
                   return;
               }
}

// ----------------------------------------------------------------------------
 
function check_mask(mask_fld)
{
    var i, ln, js_msg = '';
    var val = '', code = '', echar = '', fchar = '';

    inside_check_mask = 1;

    if (mask_fld.value == eval(mask_fld.name+'_dmask'))
    {
        inside_check_mask = 0;
        return;
    }

    if (eval(mask_fld.name + '_emask.length') < mask_fld.value.length)
        js_msg = fld_data.fld_too_mny_chars_msg;
    else        
        for (i = 0, ln = eval(mask_fld.name + '_emask.length'); i < ln; i++)
        {

            val = mask_fld.value.charAt(i);
            code = mask_fld.value.charCodeAt(i);
            echar = eval(mask_fld.name + '_emask.charAt(i)');
            fchar = eval(mask_fld.name + '_fstr.charAt(i)');

            if (fchar == 'F' && val != echar)
            {
                if (val == ' ')
                    js_msg = fld_data.must_cont_valid_format_char_msg;
                else
                    js_msg = val + ' ' + fld_data.not_valid_format_char_msg;
                break;
            }    
            else if ((echar == '#') &&
                (!((code >= 48) && (code <= 57))))
            {
                if (val == '')
                    js_msg = fld_data.must_cont_valid_num_msg;
                else
                    js_msg = val + ' ' + fld_data.not_valid_num_msg;
                break;
            }
            else if ((echar == 'A') &&
                    (!(((code >= 48) && (code <= 57)) || 
                      ((code >= 65) && (code <= 90)) ||
                      ((code >= 97) && (code <= 122)))))
            {
                if (val == '')
                    js_msg = fld_data.must_cont_valid_alphanum_msg;
                else            
                    js_msg = val + ' ' + fld_data.not_valid_alphanum_msg;
                break;
            }
            else if ((echar == 'L') &&
                    (!(((code >= 65) && (code <= 90)) || 
                      ((code >= 97) && (code <= 122)))))
            {
                if (val == '')
                    js_msg = fld_data.must_cont_valid_letter_msg;
                else
                    js_msg = val + ' ' + fld_data.not_valid_letter_msg;
                break;
            }
            else if ((echar == 'C') &&
                    (!(((code >= 32) && (code <= 126)) || 
                     ((code >= 128) && (code <= 255)))))
            {
                if (val == '')
                    js_msg = fld_data.must_cont_valid_char_msg;
                else
                    js_msg = val + ' ' + fld_data.not_valid_char_msg;
                break;
            }
        }
    
    if (js_msg)
    {
        alert(js_msg + fld_data.corr_fmt_is_msg + eval(mask_fld.name+'_dmask')+ '.');
        mask_fld.focus();
        inside_check_mask = 0;
        return(false);
    }
    inside_check_mask = 0;
    return(true);
}

// ----------------------------------------------------------------------------

function put_mask(mask_fld, val, formelm, nn)
{
    var mtmp = '', ftmp = '', dtmp = '';
    var i, sl;   

    for (i = 0, sl = val.length; i < sl; i++)
    {
        ftmp += val.charAt(i);

        if (val.charAt(i) == 'F')
            dtmp += val.charAt(i+1);
        else
            dtmp += (val.charAt(i+1) == '#') ? '#' : '@';

        mtmp += val.charAt(++i);

    }
    if (!nn)  
        eval("document.getElementById('"+mask_fld+"_mask').innerHTML='"+dtmp+"'");

    eval(mask_fld + '_fstr = ftmp');
    eval(mask_fld + '_emask = mtmp');
    eval(mask_fld + '_dmask = dtmp');

}

// ----------------------------------------------------------------------------

function answer_window_preview(ansid, created)
{
    var agt=navigator.userAgent.toLowerCase();
    var is_major = parseInt(navigator.appVersion);
    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
        && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
        && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
    var query_str = location.search.substring(1);
    var pairs = query_str.split('&');
    var args = new Object( );
    var pos = 0;
    var argname = '';
    var value = '';
    var i = 0;

    for (i = 0; i < pairs.length; i++)
    {
        pos = pairs[i].indexOf('=');
        if (pos == -1)
            continue;
        argname = pairs[i].substring(0, pos);
        value = pairs[i].substring(pos + 1);
        args[argname] = unescape( value );
    } // end for i loop

    // Check browser version numbers.
    // Netscape version 6+ uses is_major == 5, previous versions < 5
    if(is_nav && (is_major < 5))
    {
        h_size = top.innerWidth;
        v_size = top.innerHeight;
    }
    // Netscape version 6+
    else if(is_nav && (is_major < 7))
    {
        h_size = document.body.offsetWidth;
        v_size = document.body.offsetHeight;
    }
    // All others (including IE)
    else
    {
        h_size = document.body.clientWidth;
        v_size = document.body.clientHeight;
    }

    h_size -= 20;
    v_size = Math.floor(v_size * 0.8);

    if (v_size < 200)
        v_size = 200;

    window.open('popup_adp.php?p_sid=' + args.p_sid + '&p_lva=' + args.p_lva +
                '&p_li=' + args.p_li + '&p_faqid=' + ansid + '&p_created=' +
                created + '&p_sp=' + args.p_sp, 'suggested_answer',
                'scrollbars,resizable,toolbar,menubar,width=' + h_size +
                ',height=' + v_size);
}

// ----------------------------------------------------------------------------
function check_valid_ascii(fld, valid_ascii_msg)
{
    var valid_ascii = new RegExp("^[\x0a\x0d\x20-\x7e]+$");
    if (fld.value.length > 0 && valid_ascii.test(fld.value) == false)
    {
        alert(valid_ascii_msg);
        fld.focus();
    }
}




/// dcajio
//------------------------------------------------------------------------

if (document.all) {
    hasInnerText = true;
}
else {
    hasInnerText = false;
}
    
var _ajax_fields = new Array();
var xmlDoc;

// {{ create_array(PAGE_VAR, FUNCTIONALITY, JS_FUNCTION TO CALL) }}

// {{ Browse Solution
    // {{ EXTRAS
        // limit = limit for the amount returned via the search (defaults to 5)
        // search = search keyword
        // faq_id = an answer id
    // }}
    _ajax_fields['browse_solution'] = new Object();
    create_array('browse_solution', 'top', 'top_show'); // {{ Supports: limit, search }}
    create_array('browse_solution', 'search', 'getSearchResults');  // {{ Supports: limit, search }}
    create_array('browse_solution', 'get_categories', 'category_display');
    create_array('browse_solution', 'get_recent_tickets', 'show_recent_tickets'); // {{ Supports: limit }}
    create_array('browse_solution', 'get_preview_solution', 'showPreview');// {{ Supports: faq_id -- required -- }}
    create_array('browse_solution', 'get_full_solution', 'show_full_solution'); // {{ Supports: faq_id -- required -- }}
    create_array('browse_solution', 'get_full_solution', 'show_full_solution'); // {{ Supports: faq_id -- required -- }}
    _ajax_fields['feedback'] = new Object();
    create_array('feedback', 'submit_user_rating', 'ratingSubmitted'); // {{ Supports: faq_id -- required -- }}
// }} Browse Solution

function get_preview_solution() {
}

function show_recent_tickets() {
}

function category_display(xml_string) {
alert(xml_string);
}

function top_show(xml_string) {
    parse_xml(xml_string);  // parse the XML into a human usable format
alert(xml_string);

    var root = xmlDoc.getElementsByTagName("fields")[0];
    var answers = root.getElementsByTagName("answer");
   
    document.getElementById('solution_center').innerHTML = "";
    for (i=0 ; i < answers.length ; ++i) {
        var answer = answers[i];
        var id = answer.getAttribute("id");
        var value = answer.getElementsByTagName("desc")[0].firstChild.nodeValue;
    
        document.getElementById('solution_center').innerHTML += "<A HREF='#?faq_id=" + id + "'>" + value + "</A><BR>";
    }
}

function keyword_search(xml_string) {
    parse_xml(xml_string);
alert(xml_string);

    var error = xmlDoc.getElementsByTagName("error")[0];
    if (error) {
        document.getElementById('answer_center').innerHTML = error.firstChild.nodeValue;
    }

    var root = xmlDoc.getElementsByTagName("fields")[0];

    if (root.getElementsByTagName("error").length > 0) {
        var elem = document.getElementById('answer_center');
        var err_message = root.getElementsByTagName("error")[0].firstChild.nodeValue;
        
        if(!hasInnerText){
            elem.textContent = err_message;
        } else{
            elem.innerText = err_message;
        }
        return;
    }
    
    var answers = root.getElementsByTagName("answer");
    document.getElementById('answer_center').innerHTML = "";
    
    for (i=0 ; i < answers.length ; ++i) {
        var answer = answers[i];
        var id = answer.getAttribute("id");
        var value = answer.getElementsByTagName("desc")[0].firstChild.nodeValue;
    
        document.getElementById('answer_center').innerHTML += "<A HREF='#?faq_id=" + id + "'>" + value + "</A><BR>";
    }
}



Answer.prototype.constructor = Answer;
//Answer.prototype.getLink = Answer_getAnswerLink;
Answer.prototype.getPreviewLink = Answer_getPreviewLink;
Answer.prototype.setQuestion = Answer_setQuestion;
Answer.prototype.getQuestion = Answer_getQuestion;
Answer.prototype.addImage = Answer_addImage;
Answer.prototype.setAnswerDOM = Answer_setAnswerDOM;
Answer.prototype.setAnswerHTML = Answer_setAnswerHTML;
Answer.prototype.getAnswerDOM = Answer_getAnswerDOM;
Answer.prototype.getAnswerHTML = Answer_getAnswerHTML;
Answer.prototype.hasDOMResult = Answer_hasDOMResult;
Answer.prototype.getAnswerID = Answer_getAnswerID;
Answer.prototype.getLink = Answer_getLink;

function Answer(answerID, type, extra)
{
	this.answerID = answerID;
	this.images = 0;
	this.answerDOM = null;
	this.answerHTML = '';
	this.type = type;
	this.extra = extra;
}

function Answer_setQuestion(question)
{
	this.question = question;
}

function Answer_getQuestion()
{
	return this.question;
}

function Answer_addImage()
{
	this.images++;
}

function Answer_setAnswerDOM(answerDOM)
{
	this.answerHTML = '';
	this.answerDOM = answerDOM;
}

function Answer_setAnswerHTML(answerHTML)
{
	this.answerHTML = answerHTML;
	this.answerDOM = null;
}

function Answer_hasDOMResult()
{
	return (this.answerDOM != null);
}

function Answer_getAnswerDOM()
{
	return this.answerDOM;
}

function Answer_getAnswerHTML()
{
	return this.answerHTML;
}

function Answer_getAnswerID()
{
	return this.answerID;
}

function Answer_getPreviewLink(p_sid, linkText, type, extra, ellipsisLength)
{
	var result = '<a href="std_adp.php?id=' + this.answerID + '&p_sid=' + p_sid + '&type=' + this.type + '&extra=' + this.extra + '" class="previewlink" title="' + linkText.replace('"', '&quot;') + '" onclick="return showAnswer(' + this.answerID + ', \'answerpreview\', \'' + this.type + '\', \'' + this.extra + '\');"><img src="http://media.monsterindia.com/recruiter/icon_arrow_gray.gif" width="12" height="12"  border="0" align="absmiddle" />&nbsp; ' + doEllipsis(linkText, ellipsisLength) + '</a>';
	return result;
}

function Answer_getLink(p_sid, type, extra)
{
	return 'std_adp.php?id=' + this.answerID + '&p_sid=' + p_sid + '&type=' + this.type + '&extra=' + this.extra;
}


var previewAnswerID = -1;
var searchAnswers;
var searchPage = 0;
var searchResultsPerPage = 5;
var previewX = '200';
var previewY = '200';
var previewWindowHeight = 360;
var previewWindowWidth = 465;

var state = '';

///////////////////////////////////////////////////////
// showAnswer
// ----------
// Simple function which shows the preview window
// and populates it with the appropriate HTML
// Calls getAnswerHTML with the required identifier
// to make the AJAX call to get the answer itself
//
// INPUT: 
//	answerID - some identifier which can be 
//		passed to the server to get a specific
//		answer.
///////////////////////////////////////////////////////

function showAnswer(answerID, previewID, type, extra)
{
	if (previewAnswerID == answerID)
	{
		return true;
	}
	
	previewAnswerID = answerID;

	var answerDiv = document.getElementById(previewID);

	// hide the preview window so we can cleanly re-populate its data
	answerDiv.style.display = 'none';

	set_state_function('browse_solution', 'get_preview_solution', Object({'faq_id' : answerID}), Object({ 'answerDiv' : answerDiv, 'type' : type, 'extra' : extra }));

	return false;
}



///////////////////////////////////////////////////////
// showPreview
// -----------
// Callback function from the preview AJAX call.
//
// INPUT: 
//	answerID - some identifier which can be 
//		passed to the server to get a specific
//		answer.
//
// OUTPUT:
//	Answer - Answer object representing the actual
//		answer retrieved from the server.
// 
// TODO:
//	RightNow - Fill in this function
///////////////////////////////////////////////////////

function showPreview(xmlstring, vars)
{
	parse_xml(xmlstring);

	var error = xmlDoc.getElementsByTagName("error")[0];
	if (error)
	{
		return;
	}

	var root = xmlDoc.getElementsByTagName("fields")[0];

	if (root.getElementsByTagName("error").length > 0)
	{
		var err_message = root.getElementsByTagName("error")[0].firstChild.nodeValue;
		return;
	}
    
	var answers = root.getElementsByTagName("answer");
	var answer = answers[0];
    
	var theAnswer = new Answer(answer.getAttribute('id'), vars['type'], vars['extra']);
if (answer.getAttribute('id') == '2357')
{
//	window.open('').document.write(xmlstring);
}

	var summaryNode = answer.getElementsByTagName('solution')[0];
	var returnNode = cloneDOMNode(summaryNode.childNodes[0], theAnswer.getLink(p_sid));

	theAnswer.setAnswerDOM(returnNode);
	theAnswer.setQuestion(answer.getElementsByTagName('summary')[0].firstChild.nodeValue);

	xAppendContent('answerid', theAnswer.getAnswerID());
	xAppendContent('answerpreviewtitle', doEllipsis(theAnswer.getQuestion(), 42));

	if (theAnswer.hasDOMResult())
	{
		xAppendNode('previewcontent', theAnswer.getAnswerDOM());
	}
	else
	{
		xAppendContent('previewcontent', theAnswer.getAnswerHTML());
	}

	document.getElementById('viewtopiclink').href = theAnswer.getLink(p_sid);

	// show the window
	var answerDiv = vars['answerDiv'];
	
	answerDiv.style.top = previewY + 'px';
	answerDiv.style.left = previewX + 'px';
	answerDiv.style.display = '';
}



///////////////////////////////////////////////////////
// hideAnswer
// ----------
// Clears out the contents of the preview window and
// hides the window.
///////////////////////////////////////////////////////

function hideAnswer()
{
	var answerDiv = document.getElementById('answerpreview');
	document.getElementById('previewcontent').innerHTML = '';
	answerDiv.style.display = 'none';
	previewAnswerID = -1;
}



///////////////////////////////////////////////////////
// doSearch
// --------
// Performs a help search in the system, and populates
// the search results section with the appropriate 
// results.
///////////////////////////////////////////////////////

function doSearch(query, p_sid)
{
    // dcajio
    //alert('Before: ' + query);
    query = query.split("'").join("&#145;");
    //alert('After: ' + query);
    // dcajio - end
	var searchResults = document.getElementById('searchresults');
	var noSearchResults = document.getElementById('nosearchresults');
	var resultsNode = document.getElementById('results');

	// Hide old results
	searchResults.style.display = 'none';
	noSearchResults.style.display = 'none';
	
	// No next/prev
	document.getElementById('prevnextsep').style.display='none';
	document.getElementById('nextfiveenabled').style.display='none';
	document.getElementById('previousfiveenabled').style.display='none';

	if (query || query != '')
	{
		populateSearchResults(resultsNode, searchResults, noSearchResults, query, p_sid);
	}
}



///////////////////////////////////////////////////////
// populateSearchResults
// ---------------------
// Take an array of Answer objects and populate the
// search results section of the interface.
//
// INPUT: 
//	resultsNode - the node where we will populate
//		the search results
//	query - some query inputted by the user
//
// OUTPUT:
//	bool - true if results were found
/////////////////////////////////////////////////////////

function populateSearchResults(resultsNode, foundResultsNode, notFoundResultsNode, query, p_sid)
{
	var bReturn = false;
	// Clear out old results
	while (resultsNode.childNodes[0])
	{
		resultsNode.removeChild(resultsNode.childNodes[0]);
	}
    //alert('Here: ' + query);
	set_state_function('browse_solution', 'search', Object({ search: query, limit: 10000 }), Object({ 'resultsNode' : resultsNode , 'foundResultsNode' : foundResultsNode, 'notFoundResultsNode' : notFoundResultsNode, 'p_sid' : p_sid, 'search' : query }))
//	var results = getSearchResults(query);

	return true;
}


///////////////////////////////////////////////////////
// getSearchResults
// ----------------
// Should make some call to the server to get back some
// search results for a search query.
//
// INPUT: 
//	query - some query inputted by the user
//
// OUTPUT:
//	Answer[] - Array of answer objects used to
//		populate the search results.
// 
// TODO:
//	RightNow - Fill in this function
///////////////////////////////////////////////////////

function getSearchResults(results, vars)
{
	parse_xml(results);
	// Get results of search via AJAX to create a list
	// of Answer objects.  Use these objects to create
	// the results list.  Currently, we want to show only 
	// five results, but the system should be made to 
	// accommodate more than five items.

	var error = xmlDoc.getElementsByTagName("error")[0];
	if (error)
	{
		vars['foundResultsNode'].style.display='none';
		vars['notFoundResultsNode'].style.display='';
		return;
	}

	var root = xmlDoc.getElementsByTagName("fields")[0];

	if (root.getElementsByTagName("error").length > 0)
	{
		var err_message = root.getElementsByTagName("error")[0].firstChild.nodeValue;
		return;
	}
    
	var answers = root.getElementsByTagName("answer");
    
	// new set of results
	searchAnswers = new Array();
	searchPage = 0;
	for (i = 0 ; i < answers.length ; i++)
	{
		var answer = answers[i];
		var id = answer.getAttribute("id");

		// create an Answer object
		var theAnswer = new Answer(id, 'search', vars['search']);

		if (answer.getElementsByTagName("desc")[0].firstChild)
		{
			// set up the appropriate question
			theAnswer.setQuestion(answer.getElementsByTagName("desc")[0].firstChild.nodeValue);

			// Add Answer to the returned list
			searchAnswers[searchAnswers.length] = theAnswer;
		}
	}
	
	// This is the node where we want to write out our results
	var resultsNode = vars['resultsNode'];

	if (searchAnswers.length > 0)
	{
		var list = document.createElement('ul');
		list.className = 'results';
		
		for (i = searchPage * searchResultsPerPage; i < searchAnswers.length && i < (searchPage + 1) * searchResultsPerPage; i++)
		{
			var item = document.createElement('li');
			item.innerHTML = searchAnswers[i].getPreviewLink(vars['p_sid'], searchAnswers[i].getQuestion(), '','', 100);
			list.appendChild(item);
		}
		resultsNode.appendChild(list);
		bReturn = true;

		vars['foundResultsNode'].style.display='';
		vars['notFoundResultsNode'].style.display='none';
	}
	else
	{
		vars['foundResultsNode'].style.display='none';
		vars['notFoundResultsNode'].style.display='';
	}
	
	// No prev, since this is first set of results
	document.getElementById('prevnextsep').style.display='none';
	// No separator since there is no prev
	document.getElementById('previousfiveenabled').style.display='none';
	// Haven't determined if we need a next yet
	document.getElementById('nextfiveenabled').style.display='none';

	// If there is a set of results on the next page, enable the next
	if ((searchPage + 1) * searchResultsPerPage >= searchAnswers.length)
	{
		document.getElementById('nextfiveenabled').style.display='none';
	}
	else
	{
		var nRemaining = Math.min(searchAnswers.length - ((searchPage + 1) * searchResultsPerPage), 5);
		{
			var nextFive = document.getElementById('nextfiveenabled');
			while (nextFive.childNodes[0])
			{
				nextFive.removeChild(nextFive.childNodes[0]);
			}
			if (nRemaining == 1)
			{
				nextFive.appendChild(document.createTextNode('Next >'));
			}
			else
			{
				nextFive.appendChild(document.createTextNode('Next >'));
			}
			nextFive.style.display = '';
		}
	}
}

function showNextFive()
{
	var resultsNode = document.getElementById('results');
	
	searchPage++;
	if (searchPage * searchResultsPerPage < searchAnswers.length)
	{
		// Clear out old results
		while (resultsNode.childNodes[0])
		{
			resultsNode.removeChild(resultsNode.childNodes[0]);
		}

		var list = document.createElement('ul');
		list.className = 'results';
		for (i = searchPage * searchResultsPerPage; i < searchAnswers.length && i < (searchPage + 1) * searchResultsPerPage; i++)
		{
			var item = document.createElement('li');
			item.innerHTML = searchAnswers[i].getPreviewLink(p_sid, searchAnswers[i].getQuestion(), 'search', 'domain', 100);
			list.appendChild(item);
		}

		resultsNode.appendChild(list);
	}

	document.getElementById('prevnextsep').style.display='none';
	document.getElementById('previousfiveenabled').style.display='';
	
	if ((searchPage + 1) * searchResultsPerPage >= searchAnswers.length)
	{
		document.getElementById('nextfiveenabled').style.display='none';
	}
	else
	{
		var nRemaining = Math.min(searchAnswers.length - ((searchPage + 1) * searchResultsPerPage), 5);
		{
			var nextFive = document.getElementById('nextfiveenabled');
			while (nextFive.childNodes[0])
			{
				nextFive.removeChild(nextFive.childNodes[0]);
			}
			if (nRemaining == 1)
			{
				nextFive.appendChild(document.createTextNode('Next >'));
			}
			else
			{
				nextFive.appendChild(document.createTextNode('Next >'));
			}
			nextFive.style.display='';
			document.getElementById('prevnextsep').style.display='';
		}
	}
}

function showPreviousFive()
{
	var resultsNode = document.getElementById('results');
	
	searchPage--;
	if (searchPage * searchResultsPerPage < searchAnswers.length)
	{
		// Clear out old results
		while (resultsNode.childNodes[0])
		{
			resultsNode.removeChild(resultsNode.childNodes[0]);
		}

		var list = document.createElement('ul');
		list.className = 'results';
		for (i = searchPage * searchResultsPerPage; i < searchAnswers.length && i < (searchPage + 1) * searchResultsPerPage; i++)
		{
			var item = document.createElement('li');
			item.innerHTML = searchAnswers[i].getPreviewLink(p_sid, searchAnswers[i].getQuestion(), 'search', 'domain', 100);
			list.appendChild(item);
		}

		resultsNode.appendChild(list);
	}

	document.getElementById('nextfiveenabled').style.display='';
	document.getElementById('prevnextsep').style.display='';
	
	if ((searchPage - 1) * searchResultsPerPage < 0)
	{
		document.getElementById('previousfiveenabled').style.display='none';
		document.getElementById('prevnextsep').style.display='none';
	}

	var nRemaining = Math.min(searchAnswers.length - ((searchPage + 1) * searchResultsPerPage), 5);
	{
		var nextFive = document.getElementById('nextfiveenabled');
		while (nextFive.childNodes[0])
		{
			nextFive.removeChild(nextFive.childNodes[0]);
		}
		if (nRemaining == 1)
		{
			nextFive.appendChild(document.createTextNode('Next >'));
		}
		else
		{
			nextFive.appendChild(document.createTextNode('Next >'));
		}
	}
}

function xAppendNode(elementID, node)
{
	var theElement = document.getElementById(elementID);
	if (theElement)
	{
		while (theElement.childNodes[0])
		{
			theElement.removeChild(theElement.childNodes[0]);
		}

		theElement.appendChild(node);
	}
}


function xAppendContent(elementID, value)
{
	xAppendNode(elementID, document.createTextNode(value));
}



function expandTopic(topicNode)
{
	var topicResults = topicNode.getElementsByTagName('ul')[0];
	var arrow = topicNode.getElementsByTagName('img')[0];
	if (topicResults.style.display == '' || topicResults.style.display == 'block')
	{
		topicResults.style.display = 'none';
		arrow.src = 'http://media.monsterindia.com/recruiter/icon_arrow_gray.gif';
	}
	else
	{
		topicResults.style.display = '';
		arrow.src = 'http://media.monsterindia.com/recruiter/icon_arrow_gray1.gif';
	}
}


function expandAllTopics()
{
	showHideTopics('');
}


function collapseAllTopics()
{
	showHideTopics('none');
}


function showHideTopics(state)
{
	var topics = getElementsByClassName(document, 'ul', 'questions');
	for (i = 0; i < topics.length; i++)
	{
		topics[i].style.display = state;
		var arrow = topics[i].parentNode.getElementsByTagName('img')[0];
		if (state == '')
		{
			arrow.src = 'http://media.monsterindia.com/recruiter/icon_arrow_gray1.gif';
		}
		else
		{
			arrow.src = 'http://media.monsterindia.com/recruiter/icon_arrow_gray.gif';
		}
	}
}

function getElementsByClassName(oElm, strTagName, oClassNames)
{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if (typeof oClassNames == "object")
	{
		for(var i = 0; i < oClassNames.length; i++)
		{
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else
	{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}

	var oElement;
	var bMatchesAll;

	for(var j = 0; j < arrElements.length; j++)
	{
		oElement = arrElements[j];
		bMatchesAll = true;
		for (var k = 0; k < arrRegExpClassNames.length; k++)
		{
			if (!arrRegExpClassNames[k].test(oElement.className))
			{
				bMatchesAll = false;
				break;					  
			}
		}
		if(bMatchesAll)
		{
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}


function cloneDOMNode(theNode, answerUrl)
{
	var returnVal = document.createElement(theNode.nodeName);
	if (theNode.getAttribute('href'))
	{
		returnVal.setAttribute('href', theNode.getAttribute('href'));
		returnVal.setAttribute('target', '_blank');
	}

	if (theNode.nodeName.toLowerCase() == 'img')
	{
		var imgNode = returnVal;
		returnVal.setAttribute('src', '/rnt/rnw/img/enduser/preview_image_24x18.gif');
		returnVal.setAttribute('width', 24);
		returnVal.setAttribute('height', 18);
		returnVal = document.createElement('div');
		returnVal.appendChild(imgNode);
		returnVal.appendChild(document.createTextNode(' '));
		var viewImageLink = document.createElement('a');
		viewImageLink.setAttribute('href', answerUrl);
		viewImageLink.appendChild(document.createTextNode('View entire Topic to see image'));
		returnVal.appendChild(viewImageLink);		
	}
	
	for (var i = 0; i < theNode.childNodes.length; i++)
	{
		var childNode = theNode.childNodes[i];
		if (childNode.nodeType == 3)
		{
			returnVal.appendChild(document.createTextNode(childNode.nodeValue));
		}
		else if (childNode.nodeType == 1)
		{
			returnVal.appendChild(cloneDOMNode(childNode, answerUrl));
		}
	}

	return returnVal;
}


function submitRating(answerID, value, p_sid, question)
{
	var ratingVal = '';
	for (i = 0; i < value.length; i++)
	{
		if (value[i].checked)
		{
			ratingVal = value[i].value;
		}
	}

	if (ratingVal != '')
	{
		set_state_function('feedback', 'submit_user_rating', Object({'faq_id' : answerID, 'rating_val' : ratingVal}), Object({'ratingDiv' : document.getElementById('rating'), 'submittedRatingDiv' : document.getElementById('submittedrating')}));
	}

	// If user chose "no"
	if (ratingVal == 1)
	{
		window.open('answer_fdbck.php?p_sid=' + p_sid
			+'&p_rating='+escape(171)
			+'&p_subject='+escape(question)
			+'&p_faqid=' + answerID,
			'suggestion',
			'resizable,scrollbars,width=540,height=430');
	}
}

function ratingSubmitted(results, vars)
{
	var ratingDiv = vars['ratingDiv'];
	var submittedRatingDiv = vars['submittedRatingDiv'];

	ratingDiv.style.display = 'none';
	submittedRatingDiv.style.display = '';
}

function doEllipsis(content, size)
{
	if (content.length > size)
	{
		return content.substring(0, size) + "...";
	}
	return content;
}

function createNewAttachment(attachmentLocation)
{
	var newAttachment = document.createElement('input');
	newAttachment.name = 'p_fattch_new[]';
	newAttachment.type = 'file';
	newAttachment.setAttribute('size', 40);
	newAttachment.className = 'attachment';
//	newAttachment.onchange = displayRemove;
	newAttachment.onchange = function() { displayRemove(); createNewAttachment(document.getElementById('attachments')); }
	
	attachmentLocation.appendChild(newAttachment);
	attachmentLocation.appendChild(document.createElement('br'));
}

function setupPreview()
{
	document.onmousedown=doMouseDown;
	document.onmouseup=doMouseUp;
	document.onmousemove=doMouseDrag;
	document.ondblclick=doDoubleClick;
}

var inDrag = false;
var dragStartX = -1;
var dragStartY = -1;
var divStartX = -1;
var divStartY = -1;
var dragHandle = null;

function getTarget(e)
{
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;

	return targ;
}

function doMouseDown(e)
{
	var downLoc = getTarget(e);
	if (downLoc.className == 'closebutton')
	{
		downLoc.parentNode.parentNode.style.display='none';
		
	}
	if (downLoc.className == 'handle' && !inDrag)
	{
		inDrag = true;
		var evt = e;
		if (!e)
		{
			evt = window.event;
			dragStartX = evt.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
			dragStartY = evt.clientY + document.documentElement.scrollTop + document.body.scrollTop;
		}
		else
		{
			dragStartX = evt.clientX + window.scrollX;
			dragStartY = evt.clientY + window.scrollY;
		}
		dragHandle = downLoc;

		if (downLoc.className == 'handle')
		{
			divStartX = downLoc.parentNode.parentNode.style.left;
			divStartX = divStartX.substring(0, divStartX.length - 2);
			divStartX++;
			divStartX--;

			divStartY = downLoc.parentNode.parentNode.style.top;
			divStartY = divStartY.substring(0, divStartY.length - 2);
			divStartY++;
			divStartY--;
		}
	}
	
	if (downLoc.className == 'previewlink')
	{
		previewX = 0;
		previewY = 0;
		var evt = e;
		if (!e)
		{
			evt = window.event;
			evt.returnValue = false;
			previewX = evt.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
			previewY = evt.clientY + document.documentElement.scrollTop + document.body.scrollTop;
		}
		else
		{
			evt.preventDefault();
			previewX = evt.clientX + window.scrollX;
			previewY = evt.clientY + window.scrollY;
		}
		
		previewX++;
		previewX--;
		previewY++;
		previewY--;
		previewX += 20;
		previewY -= 20;
		
		var topOfScreen = 0;
		var bottomOfScreen = 0;
		var leftOfScreen = 0;
		var rightOfScreen = 0;
		if (!e)
		{
			topOfScreen = document.documentElement.scrollTop + document.body.scrollTop;
			bottomOfScreen = document.documentElement.clientHeight + topOfScreen;
			leftOfScreen = document.documentElement.scrollLeft + document.body.scrollLeft;
			rightOfScreen = document.documentElement.clientWidth + leftOfScreen;
		}
		else
		{
			topOfScreen = window.scrollY;
			bottomOfScreen = window.innerHeight + topOfScreen;
			leftOfScreen = window.scrollX;
			rightOfScreen = window.innerWidth + leftOfScreen;
		}

		if (previewY + previewWindowHeight > bottomOfScreen)
		{
			previewY = bottomOfScreen - previewWindowHeight;
		}
		if (previewY < topOfScreen + 20)
		{
			previewY = topOfScreen + 20;
		}

		if (previewX + previewWindowWidth > rightOfScreen)
		{
			previewX = rightOfScreen - previewWindowWidth;
		}
		if (previewX < leftOfScreen + 20)
		{
			previewX = leftOfScreen + 20;
		}
	}
}

function doMouseUp(e)
{
	var downLoc = getTarget(e);
	if (inDrag)
	{
		inDrag = false;
	}
}

function doMouseDrag(e)
{
	var handle = getTarget(e);
	if (inDrag)
	{
		var evt = e;
		var curX, curY;
		if (!e)
		{
			evt = window.event;
			curX = evt.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
			curY = evt.clientY + document.documentElement.scrollTop + document.body.scrollTop;
		}
		else
		{
			curX = evt.clientX + window.scrollX;
			curY = evt.clientY + window.scrollY;
		}

		var newX = divStartX + curX - dragStartX;
		var newY = divStartY + curY - dragStartY;
		newX += 'px';
		newY += 'px';

		dragHandle.parentNode.parentNode.style.left = newX;
		dragHandle.parentNode.parentNode.style.top = newY;

		evt.returnValue = false;
	}
}

function doDoubleClick(e)
{
	var link = getTarget(e);
	if (link.className == 'previewlink')
	{
		if (link.click)
		{
			link.click();
		}
		else
		{
			var evt = link.ownerDocument.createEvent('MouseEvents'); 
			evt.initMouseEvent('click', true, true, link.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 
			link.dispatchEvent(evt);
		}
	}
}

function displayRemove(e)
{
	var item = getTarget(e);
	var nextSibling = getNextSibling(item);
	if (item.value == '')
	{
		if (nextSibling.nodeName == 'SPAN')
		{
			item.parentNode.removeChild(nextSibling);
		}
	}
	else if (nextSibling.nodeName == 'BR')
	{
		var hideLink = document.createElement('span');
		hideLink.appendChild(document.createTextNode('  '));
		var removeAttachLink = document.createElement('a');
		removeAttachLink.onclick = removeAttachment;
		removeAttachLink.href = '#';
		removeAttachLink.className = 'mini';
		removeAttachLink.appendChild(document.createTextNode('Remove file'));
		
		hideLink.appendChild(removeAttachLink);
		item.parentNode.insertBefore(hideLink, nextSibling);
	}
}

function removeAttachment(e)
{
	var evt = e;
	if (!e)
	{
		evt = window.event;
		evt.returnValue = false;
	}
	else
	{
		evt.preventDefault();
	}

	var item = getTarget(e).parentNode;

	var attachment = getPreviousSibling(item);
	var br = getNextSibling(item);
	var myParent = item.parentNode;
	myParent.removeChild(attachment);
	myParent.removeChild(br);
	myParent.removeChild(item);
	
	var attachments = getElementsByClassName(document, 'input', 'attachment');
	if (attachments.length == 0)
	{
		createNewAttachment(document.getElementById('attachments'));
	}
}

function getNextSibling(obj)
{
	if (obj.parentNode)
	{
		for (i = 0; i < obj.parentNode.childNodes.length; i++)
		{
			if (obj.parentNode.childNodes[i] == obj)
			{
				return obj.parentNode.childNodes[i+1];
			}
		}
	}
	return null;
}

function getPreviousSibling(obj)
{
	if (obj.parentNode)
	{
		for (i = 0; i < obj.parentNode.childNodes.length; i++)
		{
			if (obj.parentNode.childNodes[i] == obj)
			{
				return obj.parentNode.childNodes[i-1];
			}
		}
	}
	return null;
}

// ----------------------------------------------------------------------------
// Original file: ajax.js

function create_array(page_var, func, js_func) {
    _ajax_fields[page_var][func] = new Array();
    _ajax_fields[page_var][func]['js_func'] = js_func;
    _ajax_fields[page_var][func]['object'] = create_xmlhttp();
}

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  //alert('Query Variable ' + variable + ' not found');
}


function parse_xml(xml_string) {
    if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(xml_string);
    }
    else {
        var parser=new DOMParser();
        
        //alert('XML:' + xml_string);
        xmlDoc=parser.parseFromString(xml_string,"text/xml");
    }    
}

function create_xmlhttp() {
    
    var xmlHttp;
    
    try {    // Firefox, Opera 8.0+, Safari    
        xmlHttp  = new XMLHttpRequest();    
    }
    catch (e) {    // Internet Explorer    
        try {      
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");      
        }
        catch (e) {      
            try {        
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");        
            }
            catch (e) {        
                alert("Your browser does not support AJAX!");        
                return false;        
            }      
        }    
    }  
    return xmlHttp;
}


function set_state_function(page, func, extra, passedInVar, state) {
    var extra = (extra == null) ? false : extra;
    var state = (state == null) ? 4 : state;
    
    _ajax_fields[page][func]['object'] = create_xmlhttp();
    var xmlHttp = _ajax_fields[page][func]['object'];
   
    var p_sid = getQueryVariable('p_sid'); 
    var p_li = getQueryVariable('p_li');

    var url = "/cgi-bin/custsupport.cfg/php/enduser/ajax_parser.php?page=" + page + "&func=" + func + "&p_sid=" + p_sid + "&p_li=" + p_li;
    
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == state) {
            var myFunc = _ajax_fields[page][func]['js_func'];
            window[myFunc](xmlHttp.responseText, passedInVar);
        }
    }

    if (extra) {
        for (keyVar in extra) {
            url = url + "&" + keyVar + "=" + extra[keyVar];
            //alert(url);
            url = url.split("&#145;").join("~~@~@~~");
        }
    }

   xmlHttp.open("GET", url, true);
   xmlHttp.send(null);
}
