var ydCkLbVer_s="20070319"; // version of ydCkLb.js, Cookie and query or search string library
//. Copyright (c) Francisco Guardiola (francisco@guardiola.net). All rights reserved.
//. Released under the GPL license (http://www.gnu.org/copyleft/gpl.html).


var g_ydCkHdrMax_i = 7600;

var g_ydCkIsMsIe_b = (navigator.appVersion.indexOf("MSIE") >= 0)? true: false;

var g_ydCkMinRfcLen_i = 4096;

var g_ydCkMaxPrp_i = g_ydCkIsMsIe_b? 4090: g_ydCkRfcDom_i * g_ydCkMinRfcLen_i;

var g_ydCkMaxUseLen_i = (g_ydCkMaxPrp_i < g_ydCkMinRfcLen_i)? g_ydCkMaxPrp_i : g_ydCkMinRfcLen_i;

var g_ydCkRfcDom_i = 20;

function ydCkAlert(r_libName_s, r_calledFrom_s, r_msg_s, r_vl_s, r_vlMaxLen_i)
{
	var m_msg_s = 'From lib: ' + r_libName_s + ', function: ' + r_calledFrom_s;

	m_msg_s += '. ' + r_msg_s;

	if (r_vl_s)
	{
		var b_vlMaxLen_i = r_vlMaxLen_i || 100;
		var m_vlEsLn_i = r_vl_s.length; 
		if (m_vlEsLn_i > b_vlMaxLen_i)
		{
			m_msg_s += ' (Of a total length of ' + m_vlEsLn_i + ', first ' + b_vlMaxLen_i + ' bytes of value: ' + r_vl_s.substring(0, b_vlMaxLen_i) + ')';
		}
		else
		{
			m_msg_s += ' (With a length of: ' + m_vlEsLn_i + ', value: ' + r_vl_s +  ')';
		}
	}
	ydMsgAlert(m_msg_s);
	return m_msg_s;
}

function ydCkClear(r_Doc, r_ckNm_s, r_path_s, r_dom_s)
{
 	if (r_ckNm_s === undefined)
	{
	 	 return undefined;
	}
	
	var m_vlUn_s = ydCkGet(r_Doc, r_ckNm_s);
	if (m_vlUn_s === undefined && !r_path_s)
	{
	 	 return undefined;
	}

	r_path_s = ydCkEndPath(r_path_s);

	var m_ck_s = r_ckNm_s + "=" +
		 ((r_path_s) ? "; path=" + r_path_s : "") +
		 ((r_dom_s) ? "; domain=" + r_dom_s : "") + 
		 "; expire=" + ydExpDate(-5000);  
	r_Doc.cookie = m_ck_s;

	if(!m_vlUn_s && r_path_s)
	{
		return m_ck_s;
	}
	else
	{
		return m_vlUn_s;
	}
}



function ydCkDirSep(r_path_s)
{
	if(typeof(r_path_s) == "undefined")
	{
		r_path_s = document.location.pathname;
	}
	var m_path_St = new String(r_path_s);
	var m_sep_s = "/";
	var m_ix_i = m_path_St.lastIndexOf(m_sep_s);
	var m_ix2_i = m_path_St.lastIndexOf("\\");
	if(m_ix2_i >= 0)
	{
			m_ix_i = m_ix2_i;
			m_sep_s = "\\";
	}

	if (m_ix_i < 0)
	{
		r_path_s = document.location.pathname;
		m_path_St = new String(r_path_s);
		m_sep_s = "/";
		m_ix_i = m_path_St.lastIndexOf(m_sep_s);
		m_ix2_i = m_path_St.lastIndexOf("\\");
		if(m_ix2_i >= 0)
		{
				m_sep_s = "\\";
		}
		m_ix_i = -1;
	}
	return new Array(m_sep_s, m_ix_i);
}


function ydCkDocDir(r_Doc)
{
	if(typeof(r_Doc) == "undefined")
	{
		r_Doc = document;
	}

	var m_path_s = r_Doc.location.pathname;

	var m_pathArr_v = ydCkDirSep(m_path_s);

	var m_path_s = m_path_s.substring(0, m_pathArr_v[1] + 1);
	return m_path_s;
}

function ydCkEndPath(r_path_s, r_Doc)
{
	var m_Doc = r_Doc || document;
	if(!r_path_s)
	{
		return r_path_s;
	}

	var m_docPath_s = m_Doc.location.pathname;
	var m_pathArr_v = ydCkDirSep(m_docPath_s);
	var m_sep_s = m_pathArr_v[0];
	var m_path_s = r_path_s;

	if(m_sep_s == '/')
	{
		m_path_s = m_path_s.replace(/\\/gi, "/");
	}
	else if(m_sep_s == '\\' && m_path_s.length > 1)
	{
		m_path_s = m_path_s.replace(/\//gi, "\\");

		if((m_docPath_s.charAt(0) == '/') && (m_path_s.charAt(0) == '\\'))
		{
			m_path_s = "/" +m_path_s.substring(1);
		}
	}

	var m_lstCh_s = m_path_s.charAt(m_path_s.length - 1);
	if(m_lstCh_s != "/" && m_lstCh_s != "\\")
	{
		m_path_s += m_sep_s;
	}
	return m_path_s;
}

function ydCkFormat(r_fldObject_s, r_sepNm_s, r_sepFld_s)
{
	var m_ck_s = "";
	var m_frst_b = true;
	
	
	var m_sepNm_s = r_sepNm_s || ":"; 
	var m_sepFld_s = r_sepFld_s || "|";
	
	var m_ckNm_s = "";
	var m_vl_s = "";
	
	for (m_ckNm_s in r_fldObject_s)
	{
		m_vl_s = r_fldObject_s[m_ckNm_s];
		if ((m_vl_s !== undefined) &&
			(m_vl_s != null) && (typeof(m_vl_s) != "function"))
		{
			if (m_frst_b)
			{
				m_frst_b = false;
			}
			else
			{
				m_ck_s += m_sepFld_s;
			}
			m_ck_s += m_ckNm_s + m_sepNm_s + m_vl_s;
		}
	}
	return m_ck_s;
}	

function ydCkGet(r_Doc, r_ckNm_s)
{
	var m_ck_St = new String(r_Doc.cookie);
	var m_vlEs_s;
	
	if(r_ckNm_s === undefined)
	{
		var b_found_b = false;
		var b_cksObject_s = new Object();
		var b_bgNm_Arr = [0, undefined];
		while (m_vlEs_s = ydCkGetNx(m_ck_St, b_bgNm_Arr))
		{
			b_cksObject_s[b_bgNm_Arr[1]] = unescape(m_vlEs_s);
			b_found_b = true;
		}
		
		if(b_found_b)
		{	
			return (b_cksObject_s);
		}
	}
	else
	{
		m_vlEs_s = ydCkGetEs(m_ck_St, r_ckNm_s);
		if(m_vlEs_s !== undefined && m_vlEs_s !== null)
		{
			return unescape(m_vlEs_s);
		}
	}

	return undefined;
}	

function ydCkGetCkFld(r_Doc, r_ckNm_s, r_flNm_s, r_sepNm_s, r_sepFld_s)
{
	var m_ckVl_s = "";
	
	m_ckVl_s = ydCkGet(r_Doc, r_ckNm_s);
	
	if (!m_ckVl_s)
	{
	 	 return undefined;	
	}

	var m_fld_s = ydGetFld(m_ckVl_s, r_flNm_s, r_sepNm_s, r_sepFld_s);
	
	return m_fld_s;
}	

function ydCkGetEs(r_ck_St, r_ckNm_s, r_calledFrom_s)
{
	var m_calledFrom_s = 'ydCkGetEs';
	if(r_calledFrom_s)
	{
		m_calledFrom_s += ' (called from ' + r_calledFrom_s + ')';
	}

	if(!r_ckNm_s)
	{
		ydCkAlert('ydCkLb.js', m_calledFrom_s, 'Script ERROR 21: the r_ckNm_s parameter evaluates to false, null is returned', undefined, undefined);
		return null;
	}

	var m_nmLen_i = r_ckNm_s.length;
	var m_eqIx_i = 0;
	while(r_ck_St.charAt(m_eqIx_i) != '=')
	{
		m_eqIx_i = r_ck_St.indexOf(r_ckNm_s, m_eqIx_i);
		if(m_eqIx_i < 0)
		{
			return undefined;
		}

		m_eqIx_i += m_nmLen_i;
		while(r_ck_St.charAt(m_eqIx_i) == " ")
		{	m_eqIx_i++;
		}
	}

	var m_vlEs_s = ydGetVl(r_ck_St, m_eqIx_i);

	if(m_vlEs_s)
	{
		return m_vlEs_s;;
	}
	else
	{
		return undefined;
	}
}	

function ydCkGetFldAll(r_Doc, r_sepNm_s, r_sepFld_s)
{
	var m_cksObject_s;
	var m_fldObject_s = new Object();
	var m_fldObject_Object_s = new Object();
	
	m_cksObject_s = ydCkGet(r_Doc);
	
	if (m_cksObject_s !== undefined)
	{
		for (var b_ckNm_s in m_cksObject_s)
		{
			m_vl_s = m_cksObject_s[b_ckNm_s];
			m_fldObject_s = ydGetFld(m_vl_s, undefined, r_sepNm_s, r_sepFld_s);
			
			m_fldObject_Object_s[b_ckNm_s] = m_fldObject_s;
		}
		return m_fldObject_Object_s;
	}
	return undefined;
}	

function ydCkGetFlds(r_Doc, r_ckNm_s, r_sepNm_s, r_sepFld_s)
{
	var m_ckVl_s = "";
	
	m_ckVl_s = ydCkGet(r_Doc, r_ckNm_s);
	
	return ydGetFld(m_ckVl_s, undefined, r_sepNm_s, r_sepFld_s);
}	

function ydCkGetFldFromAll(r_cksObject_Object_s, r_ck_s, r_fld_s)
{
	var m_vl_s = "";
	var m_ckObject_s = r_cksObject_Object_s[r_ck_s];

	if (m_ckObject_s === undefined)
	{
		return "";
	}
	
	m_vl_s = m_ckObject_s[r_fld_s];
	
	if (m_vl_s === undefined)
	{
		return "";
	}
	
	return m_vl_s;
}	

function ydCkGetNx(r_ck_St, u_bgNm_Arr)
{
	var m_beg_i = u_bgNm_Arr[0];
	var m_eq_i  = 0;
	var m_end_i = 0;
	var m_ckNm_s = "";
	var m_vl_s = "";
	
	while ((m_eq_i = r_ck_St.indexOf("=",m_beg_i)) > -1)
	{
		m_ckNm_s = ydGetNm(r_ck_St, m_eq_i);
		m_vl_s = ydGetVl(r_ck_St, m_eq_i);
		m_beg_i = m_eq_i + 1;

		if(m_vl_s)
		{
			m_beg_i += m_vl_s.length;

			u_bgNm_Arr[0] = m_beg_i;
			u_bgNm_Arr[1] = m_ckNm_s;
			return m_vl_s;
		}
	}

	u_bgNm_Arr[0] = -1;
	u_bgNm_Arr[1] = undefined;
	return undefined;
}	

function ydCkNmExists(r_ck_St, r_ckNm_s, r_beg_i)
{
	if(!r_ckNm_s || !r_ck_St)
	{
		return false;
	}

	var m_ckLen_i = r_ck_St.length;
	var m_nmLen_i = r_ckNm_s.length;
	var m_beg_i = (r_beg_i === undefined)? 0 : r_beg_i;
	
	while(m_beg_i < m_ckLen_i)
	{
		var b_ix0Nm_i = r_ck_St.indexOf(r_ckNm_s, m_beg_i);
		if(b_ix0Nm_i < 0)
		{
			return false;
		}

		var b_after_i = b_ix0Nm_i + m_nmLen_i;
		
		while((b_after_i < m_ckLen_i) && (r_ck_St.charAt(b_after_i) <= " "))
		{	b_after_i++;
		}

		if((b_after_i == m_ckLen_i) || (r_ck_St.charAt(b_after_i) == '=') || (r_ck_St.charAt(b_after_i) == ';'))
		{
			var b_before_i = b_ix0Nm_i - 1;

			while((b_before_i >= m_beg_i) && (r_ck_St.charAt(b_before_i) <= " "))
			{	b_before_i--;
			}

			if((b_before_i < 0) || (r_ck_St.charAt(b_before_i) == ";"))
			{
				return true;
			}
		}

		m_beg_i = b_after_i;
	}

	return false;
}	

function ydCkSet(r_Doc, r_ckNm_s, r_vl_s, r_expir_Date, r_path_s, r_dom_s, r_secure_b, r_maxCkLen_i, r_hdrMx_i, r_minUsedInPath_i, r_calledFrom_s)
{
	var m_vlEs_s = escape (r_vl_s);

	var m_calledFrom_s = 'ydCkSet';
	if(r_calledFrom_s)
	{
		m_calledFrom_s += ' (called from ' + r_calledFrom_s + ')';
	}

	return ydCkSetEs (r_Doc, r_ckNm_s, m_vlEs_s, r_expir_Date, r_path_s, r_dom_s, r_secure_b, r_maxCkLen_i, r_hdrMx_i, r_minUsedInPath_i, m_calledFrom_s);
}

function ydCkSetEs(r_Doc, r_ckNm_s, r_vlEs_s, r_expir_Date, r_path_s, r_dom_s, r_secure_b, r_maxCkLen_i, r_hdrMx_i, r_minUsedInPath_i, r_calledFrom_s)
{
	var m_calledFrom_s = 'ydCkSetEs';
	if(r_calledFrom_s)
	{
		m_calledFrom_s += ' (called from ' + r_calledFrom_s + ')';
	}

	var m_maxCkLen_i = r_maxCkLen_i || g_ydCkMaxUseLen_i;
	var m_ckPrp_St = new String(r_Doc.cookie);
	var m_nmExists_b = ydCkNmExists(m_ckPrp_St, r_ckNm_s);
	if(m_nmExists_b)
	{
		ydCkClear(r_Doc, r_ckNm_s, r_path_s, r_dom_s);
		m_ckPrp_St = new String(r_Doc.cookie);
		m_nmExists_b = ydCkNmExists(m_ckPrp_St, r_ckNm_s);
	}

	var m_buffNeed_i = r_ckNm_s.length + 3 + r_vlEs_s.length;

	if(m_buffNeed_i > m_maxCkLen_i)
	{
		ydCkAlert("ydCkLb.js", m_calledFrom_s, "ERROR 12: The cookie: " + r_ckNm_s + " needs a space of " + m_buffNeed_i + ", that exceeds the maximum length for a simple cookie: " + m_maxCkLen_i + ". Try to use ydCkLgSet in ydCkLgLb.js or ydCkVlSet in ydCkVlLb.js. The null value is returned.", r_vlEs_s, 50);
		return null;
	}

	var m_minUsedInPath_i = ydCkUsedInPath(r_Doc, r_path_s, r_minUsedInPath_i, m_nmExists_b, r_ckNm_s);

	var m_hdrLen_i = m_minUsedInPath_i + m_buffNeed_i;

	var m_hdrMx_i = r_hdrMx_i || g_ydCkHdrMax_i;

	if(m_hdrLen_i > m_hdrMx_i)
	{
		ydCkAlert("ydCkLb.js", m_calledFrom_s, "ERROR 13: The cookie: " + r_ckNm_s + " needs a space of " + m_buffNeed_i + ", to be set in the given path: " + r_path_s + ", that together with a minimum used length of: " + m_minUsedInPath_i + ", exceeds the maximum length for the cookie header: " + m_hdrMx_i + ". Try to use ydCkVlSet in ydCkVlLb.js. The null value is returned.", r_vlEs_s, 50);
		return null;
	}

	if(m_hdrLen_i > g_ydCkMaxPrp_i)
	{
		ydCkAlert("ydCkLb.js", m_calledFrom_s, "ERROR 14: The cookie: " + r_ckNm_s + " needs a space of " + m_buffNeed_i + ", to be set in the given path: " + r_path_s + ", that together with a minimum used length of: " + m_minUsedInPath_i + ", exceeds the maximum length for the document.cookie property: " + g_ydCkMaxPrp_i + ". Try to use another navigator or ydCkVlSet in ydCkVlLb.js. The null value is returned.", r_vlEs_s, 50);
		return null;
	}

	return ydCkSetEsBs (r_Doc, r_ckNm_s, r_vlEs_s, r_expir_Date, r_path_s, r_dom_s, r_secure_b);
}

function ydCkSetEsBs (r_Doc, r_ckNm_s, r_vlEs_s, r_expir_Date, r_path_s, r_dom_s, r_secure_b)
{
	r_path_s = ydCkEndPath(r_path_s);

    var m_ck_s = r_ckNm_s + "=" + r_vlEs_s +
                     ((r_path_s) ? "; path=" + r_path_s : "") +
                     ((r_dom_s) ? "; domain=" + r_dom_s : "") +
                     ((r_secure_b) ? "; secure" : "") +
					 ((r_expir_Date) ? "; expires=" + r_expir_Date.toGMTString() : "") ;
	r_Doc.cookie = m_ck_s;
	return m_ck_s;
}

function ydCkUsedInPath(r_Doc, r_path_s, r_minUsedInPath_i, r_nmExists_b, r_ckNm_s)
{
	var m_minUsedInPath_i = r_minUsedInPath_i? r_minUsedInPath_i : 0;
	if(r_path_s)
	{
		var m_docAbsolute_s = ydCkDocDir(r_Doc);
		if((r_path_s.indexOf(m_docAbsolute_s) != 0) && (m_docAbsolute_s.indexOf(r_path_s) != 0))
		{
			return (m_minUsedInPath_i);
		}
	}

	var m_used_i = r_Doc.cookie.length;
	if(r_nmExists_b)
	{
		m_used_i -= r_ckNm_s.length;
		if(g_ydCkIsMsIe_b)
		{
			m_used_i -= 1;
		}
		else
		{
			m_used_i -= 3;
		}
	}

	if(m_used_i < m_minUsedInPath_i)
	{
		m_used_i = m_minUsedInPath_i;
	}
	return m_used_i;
}

function ydExpDate(r_days_n) 
{
	var ckExp_Date = new Date();
	ckExp_Date.setTime (ckExp_Date.getTime() + (24 * 60 * 60 * 1000)*r_days_n);
	return ckExp_Date
}

function ydGetFld(r_vl_s, r_fldNm_s, r_sepNm_s, r_sepFld_s)
{
	var m_vl_St = new String(r_vl_s);
	
	var m_sepNm_s = r_sepNm_s || ":";
	var m_sepFld_s = r_sepFld_s || "|";
	
	var m_beg_i = 0;
	var m_sep_i = 0;
	var m_end_i = 0;
	var m_fldNm_s = "";
	var m_vl_s = "";
	
	if((r_fldNm_s === undefined) && (r_vl_s !== undefined) && (r_vl_s !== null))
	{
		var b_fldObject_s = new Object();
		while ((m_sep_i = m_vl_St.indexOf(m_sepNm_s,m_beg_i)) > -1)
		{
			m_fldNm_s = ydGetNm(m_vl_St, m_sep_i, m_sepFld_s);
			m_vl_s = ydGetVl(m_vl_St, m_sep_i, m_sepFld_s);
			b_fldObject_s[m_fldNm_s] = m_vl_s;
			
			m_beg_i = m_vl_s.length + m_sep_i + 1;
		}

		return(b_fldObject_s);
	}
	else
	{
		while ((m_sep_i = m_vl_St.indexOf(m_sepNm_s,m_beg_i)) > -1)
		{
			m_fldNm_s = ydGetNm(m_vl_St, m_sep_i, m_sepFld_s);
			if (m_fldNm_s == r_fldNm_s)
			{
				m_vl_s = ydGetVl(m_vl_St, m_sep_i, m_sepFld_s);
				return m_vl_s;
			}
			m_beg_i = m_sep_i + 1;
		}
	}

	return undefined;
}	

function ydGetNm(r_ck_St, r_sep_i, r_sep_s)
{
	var m_sep_s = r_sep_s || ";";
	var m_beg_i = 0;
	var m_end_i = r_sep_i - 1;
	var m_nm_s = "";

	if(r_sep_i >= r_ck_St.length || r_sep_i < 0)
	{
		return "";
	}
	
	while ((m_end_i >= 0) && (r_ck_St.charAt(m_end_i) <= " "))
	{
		m_end_i--;
	}

	if(m_end_i < 0)
	{
		return "";
	}

	m_beg_i = m_end_i;
	while (m_beg_i >= 0)
	{
		var b_ch_s = r_ck_St.charAt(m_beg_i);
		if(b_ch_s > " " && b_ch_s != m_sep_s)
		{
			m_beg_i--;
		}
		else
		{
			break;
		}
	}

	m_beg_i++;
	
	m_nm_s = r_ck_St.substring(m_beg_i, m_end_i+1);
	return m_nm_s;
}	

function ydGetVl(r_ck_St, r_sep_i, r_lim_s)
{
	var m_beg_i = r_sep_i + 1;
	var m_end_i = -1;
	var m_vl_s = "";
	var m_ln_i = r_ck_St.length;
	var m_lim1_s = ";";
	var m_lim2_s = ",";
	
	if (r_lim_s !== undefined )
	{
		m_lim1_s = r_lim_s;
	}
	
	while ((m_beg_i < m_ln_i) && (r_ck_St.charAt(m_beg_i) <= " "))
	{
		m_beg_i++;
	}

	m_end_i = r_ck_St.indexOf(m_lim1_s, m_beg_i);
	if(m_end_i < 0)
	{
		m_end_i = m_ln_i;
	}

	if (r_lim_s === undefined )
	{
		var b_end2_i = r_ck_St.indexOf(m_lim2_s, m_beg_i);
		if(b_end2_i < 0)
		{
			b_end2_i = m_ln_i;
		}
		if(b_end2_i < m_end_i)
		{
			m_end_i = b_end2_i;
		}
	}

	while ((m_end_i <= m_ln_i) && (m_end_i >= m_beg_i) && (r_ck_St.charAt(m_end_i - 1) <= " "))
	{
		m_end_i--;
	}
	
	if (m_beg_i >= m_end_i)
	{
		return "";
	}
	else
	{
		m_vl_s = r_ck_St.substring(m_beg_i, m_end_i);
		return m_vl_s;
	}	
}

function ydSsAdd(r_url_s, r_fldNm_s, r_vl_s)
{
	if(r_vl_s != null)
	{
		if(r_url_s.indexOf("?") < 0)
		{
			r_url_s += "?";
		}
		else
		{
			r_url_s += "&";
		}
		r_url_s += r_fldNm_s + "=" + r_vl_s;
	}
	return r_url_s;
}

function ydSsCopy(r_Doc, r_url_s, r_fldNm_s, r_sepNm_s, r_sepFld_s)
{
	var m_vl_s = ydSsGet(r_Doc, r_fldNm_s, r_sepNm_s, r_sepFld_s)
	return ydSsAdd(r_url_s, r_fldNm_s, m_vl_s)
}

function ydSsGet(r_Doc, r_fldNm_s, r_sepNm_s, r_sepFld_s)
{
	var m_qs_s = unescape(r_Doc.location.search.substring(1));
	var m_beg_i = 0;
	var m_eq_i  = 0;
	var m_end_i = 0;
	var m_fldNm_s = "";
	var m_vl_s = "";
	
	var m_sepNm_s = r_sepNm_s || "=";
	var m_sepFld_s = r_sepFld_s || "&";

	if ((m_qs_s === undefined) || (m_qs_s == ""))
	{
		return undefined;
	}

	return ydGetFld(m_qs_s, r_fldNm_s, m_sepNm_s, m_sepFld_s);
}

