//==============================================================================
// Some common util functions 
//==============================================================================

// set a value to cookie
function setCookieAttribute(cookieName,cookieValue){
  try{           
   document.cookie = cookieName+'=' + escape(cookieValue)+';' + "path=/;";
  }catch(ex){
  }
}

// get a value to cookie
function getCookieAttribute(cookieName){
  try{
    var cookieString = document.cookie;
    var start = cookieString.indexOf(cookieName + '=');
    if (start <0 ){
        return null;
    }
    start += cookieName.length + 1;
    var end = cookieString.indexOf(';', start);
    var cookieValue = end < 0 ? unescape(cookieString.substring(start)) : unescape(cookieString.substring(start, end));
    return cookieValue;
  }catch(ex){
    return null;
  }
}

/* 2010-07-07 Adam Wong BEGIN */
// delete a cookie
function deleteCookie(cookieName, path, domain) {
	if (getCookieAttribute(cookieName)) {
		document.cookie = cookieName + "=" +
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "") +
		";expires=Thu, 01-Jan-1970 00:00:01 GMT";
	}
}
/* 2010-07-07 Adam Wong END */

// auto close the current window
function autoCloseWindow(){
	try{
		var closedTime = parseInt(getCookieAttribute('close_window_time'));
		if(openedTime<closedTime){
			window.close();
		}				
	}catch(ex){
		//alert(ex.message);
	}
}

// get value of url's parameter with name 'name'
function gup( url,name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  if( results == null )
    return "";
  else
    return results[1];
}

// add or replace parameter in url
function addOrReplaceParam(url, name, value) {
	try {
		var oldValue = gup(url, name);
		if (oldValue == "") {
			if (url.indexOf('?') != -1) {
				url = url +	'&'	
			} else {
				url = url + '?';
			}
			url = url + name + '=' + value;
		} else {
			url = url.replace ( new RegExp(name+ '=' + oldValue,'gm'),name+'=' +value);		
		}
	} catch (e) {
		return url;
	}
	return url;
	
}
// reload main portal page with target siteLang
function reloadPortalPage(obj,lang, isRemoveQueryString) {
	var url = '';
	try {
		if (typeof window.opener != 'undefined' && window.opener) {
			//window.opener.top.location.reload();
			url = window.opener.top.location.href;
		} else {
			//window.top.location.reload();
			url = window.top.location.href;
		}
		// remove '#[...]" at url
		var anchor_index =  url.indexOf('#');
		if (anchor_index != -1) {
			url = url.substring (0, anchor_index);
			
		}
		
		// if required to remove query string
		try {
			if (typeof isRemoveQueryString != 'undefined' && isRemoveQueryString != null && isRemoveQueryString == true) {
				url =  url.substr(0, url.lastIndexOf(window.top.location.search))
			}
		}
		catch (e) {
		}
		
		// add default site lang
		url = addOrReplaceParam (url, 'siteLang', lang);

		if (typeof window.opener != 'undefined' && window.opener != null) {
			window.opener.top.location.href =  url;
		} else {
			window.top.location.href = url;
		}	
	} catch (e) {
		//alert (e);
	} 
}

/**
 * Checks a given class attribute for the presence of a given class
 *
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   nameOfClass     The name of the CSS class to check for
 */
checkForClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (element.className == '') {
        return false;
    } else {
        return new RegExp('\\b' + nameOfClass + '\\b').test(element.className);
    }
}


/**
 * Adds a class to an element's class attribute
 *
 * @param   element         DOM Element object (or element ID) to add the class to
 * @param   nameOfClass     Class name to add
 * @see     checkForClass
 */
addClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (!checkForClass(element, nameOfClass)) {
        element.className += (element.className ? ' ' : '') + nameOfClass;
        return true;
    } else {
        return false;
    }
}


/**
 * Removes a class from an element's class attribute
 *
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   nameOfClass     Class name to remove
 * @see     checkForClass
 */
removeClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (checkForClass(element, nameOfClass)) {
        element.className = element.className.replace(
            (element.className.indexOf(' ' + nameOfClass) >= 0 ? ' ' + nameOfClass : nameOfClass),
            '');
        return true;
    } else {
        return false;
    }
}


/**
 * Replaces a class with another if the class is present
 *
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   class1          Class name to replace
 * @param   class2          Class name to replace it with
 * @see     checkForClass
 * @see     addClass
 * @see     removeClass
 */
replaceClass = function(element, class1, class2) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (checkForClass(element, class1)) {
        removeClass(element, class1);
        addClass(element, class2);
        return true;
    } else {
        return false;
    }
}


/**
 * Toggles the specified class on and off
 *
 * @param   element         DOM Element object (or element ID) to toggle the class of
 * @param   nameOfClass     Class name to toggle
 * @see     checkForclass
 * @see     addClass
 * @see     removeClass
 */
toggleClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (checkForClass(element, nameOfClass)) {
        removeClass(element, nameOfClass);
    } else {
        addClass(element, nameOfClass);
    }

    return true;
}


