﻿function jumpTo(url)
{
	location.href = url;
}


function confirmSubmitForm(id,txt)
{
	if (confirm(txt.toString()))
		document.getElementById(id).submit();
}

function checkRadio(id)
{
	document.getElementById(id).checked = true;
}
		
function submitForm(id)
{
	document.getElementById(id).submit();
}

function goToLink(link)
{
	window.open(link);
}

function setAlignment(id,isRight)
{
	if (isRight)
		document.getElementById(id).setStyle('text-align', 'right');
	else
		document.getElementById(id).setStyle('text-align', 'left');
}

/* This function was copied from here: http://james.padolsey.com/javascript/wordwrap-for-javascript/
 * Victor K.
*/
function wordWrapEx( str, width, brk, cut ) {
	 
    brk = brk || '\n';
    cut = cut || false;
 
    if (!str) { return str; }
 
    var regex = '.{1,' +width+ '}(\\s|$)' + (cut ? '|.{' +width+ '}|.+$' : '|\\S+?(\\s|$)');
 
    return str.match( RegExp(regex, 'g') ).join( brk );
 
}

function copyTruncatedTxt(dstId,srcId,maxLen,lineWrapThreshold)
{
	var str = document.getElementById(srcId).value;
	str = str.substr(0,maxLen);
	if (lineWrapThreshold != null)
	{
		resultingText = wordWrapEx(str, lineWrapThreshold, '<br />');
		document.getElementById(dstId).innerHTML = resultingText;
	}
	else
		document.getElementById(dstId).innerHTML = str;
}

function truncateTxt(srcId,maxLen)
{
	var str = document.getElementById(srcId).value;
	str = str.substr(0,maxLen);
	document.getElementById(srcId).value = str;
}

function localImg(dstId,srcId)
{
	/* Currently only supported by Mozilla Gecko engine.
	   An ongoing development of FileAPI support is going for IE10,Chrome and Opera browsers
	*/
	var fileObj = document.getElementById(srcId).files[0];
	if (typeof fileObj.getAsDataURL == 'function') /* Firefox < 7.0 */
	{
		var url = fileObj.getAsDataURL();
		document.getElementById(dstId).src = url;
	}
	else if (typeof window.URL != 'undefined' && typeof window.URL.createObjectURL == 'function') /* Firefox >= 7.0*/
	{
		var url = window.URL.createObjectURL(fileObj);
		document.getElementById(dstId).src = url;
		window.URL.revokeObjectURL(fileObj);
	}
}

function setCookie(name,value,secTimeout,domain)
{
	if (secTimeout == -1)
		secTimeout = 60*60*24*365;
		
	var exdate=new Date();
	exdate.setTime(exdate.getTime()+(secTimeout*1000));
	
	var cookie = name + "=" + escape(value);
	if (secTimeout != null)
		cookie += ";expires="+exdate.toGMTString();
	cookie += ";path=/";
	
	if (domain != null)
		cookie += ";domain=" + domain;
			
	document.cookie = cookie;
}

function getCookie(name)
{
	if (document.cookie.length>0)
  	{
  		c_start=document.cookie.indexOf(name + "=");
  		if (c_start!=-1)
    	{
    		c_start=c_start + name.length+1;
    		c_end=document.cookie.indexOf(";",c_start);
    		if (c_end==-1)
    			c_end=document.cookie.length;
    		
    		return unescape(document.cookie.substring(c_start,c_end));
    	 }
  	}
  	return "";
}


function rankSpace(spaceId,adId)
{
	var page = "/advertiser/rankSpace.php?id1=";
	page += spaceId.toString();
	page += "&id2=";
	page += adId.toString();
	
	MOOdalBox.open(page, "", "450 130");
}

function closeTab_Ad(adId)
{
	var page = "/advertiser/manageAd.php?id1=";
	page += adId.toString();
	location.href = page;
}

function closeTab_Space(spaceId)
{
	var page = "/publisher/manageSpace.php?id1=";
	page += spaceId.toString();
	location.href = page;
}

function closeTab_SpaceProp(spaceId)
{
	var page = "/publisher/manageSpaceProp.php?id1=";
	page += spaceId.toString();
	location.href = page;
}
			
function spaceDetails_ManageAd(spaceId,adId)
{
	var page = "/advertiser/manageAdSpace.php?id1=";
	page += adId.toString();
	page += "&id2=";
	page += spaceId.toString();
	
	MOOdalBox.open(page, "", "");
}

function activity_Ad(adId)
{
	var page = "/advertiser/manageAd.php?id1=";
	page += adId.toString();
	page += "&id2=yes";
	location.href = page;
}

function adDetails_Space(spaceId ,adId, yLen)
{
	var page = "/publisher/manageSpaceAd.php?id1=";
	page += spaceId.toString();
	page += "&id2=";
	page += adId.toString();
	
	if (yLen == 600)
		MOOdalBox.open(page, "", "800 1100");
	else if (yLen > 100)
		MOOdalBox.open(page, "", "800 950");
	else
		MOOdalBox.open(page, "", "800 770");;
}
	
function generateDirectLink(adId,campaignId,userId)
{
	var page = "/publisher/generateDirectLink.php?id1=";
	page += adId.toString();
	page += "&id2=";
	page += userId.toString();
	page += "&id3=";
	page += campaignId.toString();
	
	MOOdalBox.open(page, "", "630 150");
}

function showCampaignTermsOfUse(campaignId)
{
	var page = "/advertiser/campaignTermsOfUse.php?id1=";
	page += campaignId.toString();
	
	MOOdalBox.open(page, "", "");
}

function showAdUniqueConvCode(userId,convTag)
{
	var page = "/main/showUniqueCode.php?id1=0&id2=";
	page += userId.toString();
	page += "&id3=conv&id4="
	page += convTag.toString();

	MOOdalBox.open(page, "", "630 150");
}

function manageAd(adId)
{
	var page = "/advertiser/manageAd.php?id1=";
	page += adId.toString();
	location.href = page;
}

function manageAdProp(adId)
{
	var page = "/advertiser/manageAdProp.php?id1=";
	page += adId.toString();
	location.href = page;
}

function manageCampaign(campaignId)
{
	var page = "/advertiser/manageCampaign.php?id1=";
	page += campaignId.toString();
	location.href = page;
}

function managePublisherCampaign(campaignId)
{
	var page = "/publisher/manageCampaign.php?id1=";
	page += campaignId.toString();
	location.href = page;
}

function manageCampaignUser(spaceUserId, campaignId)
{
	var page = "/advertiser/manageCampaignUserSpaces.php?id1=";
	page += campaignId.toString();
	page += "&id2=";
	page += spaceUserId.toString();
	location.href = page;
}

function Ad2Space(adId)
{
	var page = "/publisher/linkAd2Sapces.php?id1=";
	page += adId.toString();
	location.href = page;
}
			
function manageSpace(spaceId)
{
	var page = "/publisher/manageSpace.php?id1=";
	page += spaceId.toString();
	location.href = page;
}

function manageSpacesAds(bannerDefId, type)
{
	var page = "/admin/manageSpacesAds.php?id1=";
	page += bannerDefId.toString();
	page += "&id2=" + type;
	location.href = page;
}

function reloadOpener()
{
	window.opener.location.reload();
}

function closeWindow()
{
	window.close();
}

function formSubmit(formId)
{
	document.getElementById(formId).submit();
}

// addings
// ------------------

function mouseOverTableSimple(trId)
{
	elm = document.getElementById(trId);
	elm.className = 'bisqueStatsTable';
}

function mouseOutTableSimple(trId)
{
	elm = document.getElementById(trId);
	elm.className = 'statsNoBgdColor';
}

function mouseOverTableStar(trId,hrefId,fullStars,hrefId2,fullStars2)
{
	elm = document.getElementById(trId);
	elm.className = 'bisqueStatsTable';
	
	for (i=0; i<5; i++)
	{
		id = hrefId;
		id += i.toString();
		if (i<fullStars)
			document.images[id].src='/content/images/white-star-full.png';		
		else
			document.images[id].src='/content/images/white-star-empty.png';		
	}
	
	if (hrefId2 == null)
		return;
	
	for (i=0; i<5; i++)
	{
		id = hrefId2;
		id += i.toString();
		if (i<fullStars2)
			document.images[id].src='/content/images/white-star-full.png';		
		else
			document.images[id].src='/content/images/white-star-empty.png';		
	}	
}

function mouseOutTableStar(trId,hrefId,fullStars,hrefId2,fullStars2)
{
	elm = document.getElementById(trId);
	elm.className = 'statsNoBgdColor';

	for (i=0; i<5; i++)
	{
		id = hrefId;
		id += i.toString();
		if (i<fullStars)
			document.images[id].src='/content/images/star-full.png';
		else
			document.images[id].src='/content/images/star-empty.png';
	}
	
	if (hrefId2 == null)
		return;
	
	for (i=0; i<5; i++)
	{
		id = hrefId2;
		id += i.toString();
		if (i<fullStars2)
			document.images[id].src='/content/images/star-full.png';
		else
			document.images[id].src='/content/images/star-empty.png';
	}
}

function mouseOverTableClick(trId,hrefId)
{
	elm = document.getElementById(trId);
	elm.className = 'bisqueStatsTable';

	elm = document.getElementById(hrefId);
	elm.className = 'white';
}

function mouseOutTableClick(trId,hrefId)
{
	elm = document.getElementById(trId);
	elm.className = 'statsNoBgdColor';

	elm = document.getElementById(hrefId);
	elm.className = 'red';
}

function addToFavorites(siteURL, siteTitle)
{
    if (window.navigator.userAgent.indexOf("Firefox")==-1)
    {//IE
        window.external.AddFavorite(siteURL, siteTitle);
    }
    else
    {//Firefox
        window.sidebar.addPanel(siteTitle, siteURL, "");
    }
}

function changeImg(img, newSrc)
{
	img.src = newSrc;
}

function validateCheckboxesForm(form)
{
	for (var i = 0; i < form.elements.length; i++) 
	{
		if (form.elements[i].checked == true)
			return true;
	}
	
	return false;
}

function showAdDetails(adId, validateAd, yLen, isPub, userId)
{
	if (validateAd == null)
		validateAd = false;
	
	var page = "/main/showAdDetails.php?id1=";
	page += adId.toString();
	page += "&id2=";
	page += (validateAd) ? '1' : '0';
	page += "&id3=";
	page += (isPub) ? '1' : '0';
	page += "&id4=";
	page += userId.toString();

	if (yLen == 600)
		MOOdalBox.open(page, "", "730 670");
	else if (yLen > 100)
		MOOdalBox.open(page, "", "730 610");
	else
		MOOdalBox.open(page, "", "730 420");
}

function showSpaceDetails(spaceId)
{
	var page = "/main/showSpaceDetails.php?id1=";
	page += spaceId.toString();
	
	MOOdalBox.open(page, "", "");
}

function updateBannerSizePreviewTooltip(bannerSize, bannerSizePreviewTooltipId) 
{
	bannerSizeSplit = bannerSize.split('x');
	width = bannerSizeSplit[0];
	height = bannerSizeSplit[1];
	
	// Re-store tooltip's text
	var text = (getUserLanguage() == 'en') ? 'Selected banner size preview:' : 'תצוגה מקדימה של גודל הבאנר הנבחר:';
	text += '<table align="center" class="bannerSizePreview">' +
				'<tr>' +
					'<td align="center" width="' + width + '" height="' + height + '">' +
						bannerSize +
					'</td>' +
				'</tr>' +
			'</table>';
	$(bannerSizePreviewTooltipId).store('tip:text', text); 
}
	
function getComboboxSelectedValue(combobox)
{
	selectedIndex = combobox.selectedIndex;
	selectedValue = combobox.options[selectedIndex].innerHTML;
	return selectedValue;
}

function showBannerSizesPreview(mode)
{
	var page = "/main/showBannerSizesPreview.php?mode=";
	page += mode.toString();
	
	switch (mode)
	{
		case 0:
			MOOdalBox.open(page, "", "950 1550");
			break;
		case 1:
			MOOdalBox.open(page, "", "950 1150");
			break;
		case 2:
			MOOdalBox.open(page, "", "777 682");
			break;
		case 3:
			MOOdalBox.open(page, "", "433 215");
			break;
		case 4:
			MOOdalBox.open(page, "", "777 1060");
			break;
	}
}

function showRssLink()
{
	var page = "/help/showRssLink.php";
	MOOdalBox.open(page, "", "630 150");
}

/*
 * Ad previews.
 * 0 - Classic mode of preview of 4-5 ads at once.
 * 1 - New mode of preview of single ad only.
 * */

function showBuzzerPreview(mode)
{
	var page = "/main/showBuzzerPreview.php?mode=";
	page += mode.toString();
	switch (mode)
	{
		case 0:
			MOOdalBox.open(page, "", "750 300");
			break;
		case 1:
			MOOdalBox.open(page, "", "137 173");
			break;
	}
}

function showTextualPreview(mode)
{
	var page = "/main/showTextualPreview.php?mode=";
	page += mode.toString();
	switch (mode)
	{
		case 0:
			MOOdalBox.open(page, "", "800 300");
			break;
		case 1:
			MOOdalBox.open(page, "", "139 109");
			break;
	}
}

function showYnetBanner(where)
{
	var page = "/help/showYnetBanner.php?id1=";
	page += where.toString();
	
	MOOdalBox.open(page, "", "600 446");
}

/*
 * objId: id= of the element
 * objType: th,tr,tbody,tfoot
 */
function switchTableObjVisibility(objId,optForceMode)
{
	if ($(objId) == null)
	{
		alert("Object '"+objId+"' does not exist. Please check your code.");
		return;
	}

	if (optForceMode == null)
	{
		var currStyle = $(objId).getStyle('display');
		if (currStyle ==  'none')
			$(objId).setStyle('display', ''); /* Use '' and NOT 'block' otherwise FF will corrupt the
			 									 Object if it is a tr/tbody/etc. '' is handled propertly
			 									 by IE as well and restores the valid type for the object */
		else
			$(objId).setStyle('display', 'none');
	}
	else
		$(objId).setStyle('display', optForceMode);
}

function switchExpansionBoxStatus(objId,optForceText)
{
	var currText = $(objId).get('text');
	if (optForceText == null)
	{
		if (currText.length == 3 && currText.charAt(1) == '+')
			$(objId).set('text', '[-]');
		else
			$(objId).set('text', '[+]');
	}
	else
		$(objId).set('text', optForceText);
}

function fadingMsgs(divId, msgs, duration, delay)
{
	var i = 0;
	var container = $(divId);
	var msgDivs = new Array();
	
	// Clear the container
	container.set('text', '');

	msgs.each(function (msg) {
		var msgDiv = new Element('div', {
			'styles': {
				'background-color': 'white',
				'position': 'absolute',
				'right': container.getStyle('padding-right'),
				'left': container.getStyle('padding-left'),
				'opacity': '0'
			},
			'html': msg,
			'tween': {
				'duration': duration
			}
		});
		msgDivs.push(msgDiv);
		container.grab(msgDiv);
	});
	msgDivs[i].fade('in');
	
	setInterval(function() {
		msgDivs[i].fade('out');
		i = (i + 1) % msgDivs.length;
		msgDivs[i].fade('in');
	}, delay);
}

/**
 * Check/uncheck all the checkboxes. The 'select all' checkbox's id should be 'select_all'.
 */
function toggleSelectAll() {
	var checked = $('select_all').checked;
	$$('input[type=checkbox][id!=select_all]').each( function(checkbox){
		checkbox.checked = checked;
	});
}

/**
 * If all the checkboxes are checked, check the 'select_all' checkbox, otherwise uncheck it
 */
function toggleSelectAllCheckbox() {
	var allChecked = true;
	$$('input[type=checkbox][id!=select_all]').each( function(checkbox){
		if (!checkbox.checked)
			allChecked = false;
	});
	$('select_all').checked = allChecked;
}

/**
 * Change the status of all checkboxes with id including the string checkBoxIdBase to newCheckboxState status.
 */
function toggleCheckboxGroup(checkBoxIdBase, newCheckboxState)
{
	var allInputObjects = $(document.body).getElements('input');
	if (allInputObjects != null)
	{
		var ammountOfInputObjects = allInputObjects.length, i;
		for (i = 0; i < ammountOfInputObjects; i ++)
		{
			if ((allInputObjects[i].type == 'checkbox') && (allInputObjects[i].id.search(checkBoxIdBase) != -1))
			{
				allInputObjects[i].checked = newCheckboxState;
			}
		}
	}
}

/**
 * Change the status of main groupping checkbox grouppingCheckboxId according to status of all child checkboxes it manages
 * (Having childCheckboxesIdBase as substring of their id).
 */
function toggleGrouppingCheckboxState(grouppingCheckboxId, childCheckboxesIdBase)
{
	var grouppingCheckboxObject = $(document.body).getElementById(grouppingCheckboxId);
	var allChildObjects = $(document.body).getElements('input');
	if (grouppingCheckboxObject != null && allChildObjects != null)
	{
		var ammountOfChildObjects = allChildObjects.length, i, isGrouppingCheckboxShouldBeChecked = true;
		for (i = 0; i < ammountOfChildObjects; i ++)
		{
			if ((allChildObjects[i].type == 'checkbox') && (allChildObjects[i].id.search(childCheckboxesIdBase) != -1))
			{
				if (allChildObjects[i].checked == false)
				{
					isGrouppingCheckboxShouldBeChecked = false;
					break;
				}
			}
		}
		grouppingCheckboxObject.checked = isGrouppingCheckboxShouldBeChecked;
	}
}

function printPage(page) {
	var printFrame = new IFrame({
	    src: page,
    	styles: {
    		width: 0,
			height: 0
	    },
    	events: {
			load: function() {
	    		printFrame.contentWindow.focus();
				printFrame.contentWindow.print();
			}
		}
	});
	printFrame.inject(document.body);
}

// ---------------------------------------------
// forms generic validation & utils
// ---------------------------------------------
function getSmsValidationTxt()
{
	var validationTxt = 'לצורך השלמת תהליך הרישום <b>ויצירת קשר מהירה של נציג שירות</b>, אנא הזן את קוד האימות שנשלח כעת לסלולרי שלך <br /><b>(ללא כל עלות כספית)</b>';
	return validationTxt;
}

var sendHostedLeadMutex=0;
function sendHostedLead(name, phone, email, info0, info1, info2, info3)
{	
	if (sendHostedLeadMutex==1)
		return;
	
	sendHostedLeadMutex=1;	
	$.post(	"/live/liveHostedLeadAjaxPost.php",
			{
				name:  (name==null)?'':name,
	            phone: (phone==null)?'':phone,
	            email: (email==null)?'':email,
	            info0: (info0==null)?'':info0,
	            info1: (info1==null)?'':info1,
	            info2: (info2==null)?'':info2,
	            info3: (info3==null)?'':info3,
	            uid: getUrlParam("uid"),
	            submit: "lead"
			},
			function(result) {
				sendHostedLeadMutex=0;
	            if (result=='sms')
	            {
	            	var txtId = document.getElementById('validationTxt');
	            	if (txtId != null)
	            		txtId.innerHTML = getSmsValidationTxt();
	            	
	            	$(".popupSms").bPopup();
	            }
	            else if (result=='ok')
	            	$(".popupTnx").bPopup();
	            else
	            	alert("בעייה בהתחברות לשרת");
            });
}
function sendSmsValidation()
{
	if (!isSmsCodeValid($("#sms").val()))
	{
		 alert("קוד אימות לא תקין");
		 return false;
	}

	$.post(	"/live/liveHostedLeadAjaxPost.php",
        	{
                code: $("#sms").val(),
                user: getUrlParam("suid"),
                submit: "sms"
        	},
			function(result) {
        		if (result=='ok')
		            $(".popupTnx").bPopup();
        		else
        			alert("בעייה בהתחברות לשרת");
        	});
	

	 return true;
}

function getUrlParam(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  
  if( results == null )
	  return "";
  else
	  return results[1];
}
function isSmsCodeValid(code)
{
	if (code == '')
		return false;
	
	if (!_isNumber(code)) 
		return false;
	
	if (code.length != 5)
		return false;
	
	return true;
}
function isEmailValid(email)
{
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	
	return emailPattern.test(email);
}
function isFieldValid(s)
{
	if (s == '')
		return false;
	
	return true;
}
function _isNumber(s) 
{
	var i;
	for (i = 0; i < s.length; i++)
	{   
		var c = s.charAt(i);
		if ((((c < "0") || (c > "9")))&&(c != "-"))
			return false;
	}
	return true;
}
function isPhoneNumberValid(phone) 
{
	var threecodes = new Array('054','050','052','057','072','077','074');
	var twocodes = new Array('02','03','04','08','09');
	
	var maxphonelength = 10;
	var minphonelength = 9;
	
	if (!_isNumber(phone)) 
		return false;
	
	if (phone.indexOf('-')!=-1)
	{
		maxphonelength = 11;
		minphonelength = 10;
	}
	
	if ((phone.length>maxphonelength) || (phone.length<minphonelength))
		return false;
	
	if (phone.length == maxphonelength) 
	{
		valid = 0 ;
		for (var i in threecodes)
		{
			if(phone.indexOf(threecodes[i]) == 0)
			{
				valid = 1;
				break;
			}
		}
		
		if(!valid)
			return false;
	}
	
	if (phone.length==minphonelength) 
	{
		valid = 0;
		for (var i in twocodes)
		{
			if(phone.indexOf(twocodes[i]) == 0) 
			{ 
				valid = 1;
				break;
			}
		}
		 
		if(!valid)
			return false;
	}
	
	return true;
}
//---------------------------------------------
//forms generic validation & utils
//---------------------------------------------


//---------------------------------------------
// Cross-Domain intercommunication routines
//---------------------------------------------

/* Doesn't work on IE<10 then http->https and vice-versa AJAX calls occurs due to integral policy */
function sendPostEx(url, postData, successCallback, errorCallback)
{
	if (typeof window.XDomainRequest != 'undefined') /* Use MS's XDomainRequest limited object(IE8+) */
	{
		var xhr = new window.XDomainRequest;
		xhr.open('POST', url);

		xhr.onload = function(e)
						{
							successCallback(this.responseText);
						}

		xhr.onerror = function(e) {
			errorCallback(e);
		}

		xhr.send(postData);
	}
	else if (typeof window.XMLHttpRequest != 'undefined') /* Use XMLHttpRequest 2 Draft(FF,Chrome,IE10) */
	{
		var xhr = new window.XMLHttpRequest;
		xhr.open('POST', url, true);
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-length", postData.length);
		xhr.setRequestHeader("Connection", "close");
		xhr.responseType = 'text';
		xhr.onreadystatechange = function(e) {
												if (this.readyState == 4 && this.status == 200)
												{
													successCallback(this.response);
												}
											}

		xhr.onerror = function(e) {
			errorCallback(e);
		}

		xhr.send(postData);
	}
}

//---------------------------------------------
// Cross-Domain intercommunication routines
//---------------------------------------------


//---------------------------------------------
// PHP-JS Interaction Routines
//---------------------------------------------

function urlencode (str) {
    // URL-encodes string  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/urlencode    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer    // +      input by: Ratheous
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Joris
    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
    // %          note 1: This reflects PHP 5.3/6.0+ behavior    // %        note 2: Please be aware that this function expects to encode into UTF-8 encoded strings, as found on
    // %        note 2: pages served as UTF-8
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
    str = (str + '').toString();
     // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
    // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+').replace(/~/g, '%7E');
}

//---------------------------------------------
// PHP-JS Interaction Routines
//---------------------------------------------
