


/******************************************************************************************
         vyewLib.js
 ******************************************************************************************/

/*
	@version 1.1
	CONTAINS: cookieLib
	dbg
*/

if(typeof vyew=="undefined") vyew=new Object();

//pass a callback, will pass one param: 
//		{em:email@ddress, reg:guest|pers|plus|pro}
//		or false, if not logged in
/*
vyew.getUserInfo=function(callback)
{
    if(getCookie('em') && getCookie("lID") && getCookie("sid"))
		callback.apply(this,[{em:getCookie('em')}])
    else if (getCookie('lID')) vyew.getUserEmail(callback);
    else callback.apply(this,[false]);
}
*/


//callsback with function({em:email@address.com});
vyew.checkLogin=function(callback)
{
	if(getCookie('sid') || getCookie('lID')){
		vyew.getUserEmail(callback);
	}else callback.apply(this,[false]);
}

/*
Todo, handle multiple ajax calls
vyew.checkLogin_called=false;
vyew.checkLogin_callbacks=[];
vyew.execCallbacks=function(cbArray, argsArray)
{

}
*/
vyew.getUserEmail=function(callback)
{
    var lID=getCookie('lID');
	var sid=getCookie('sid');

//todod.... 
//if sid, check if good, return em
//else if lid, check, return em and sid

	vyew.gue_callback=callback;
	if(sid){
		$.post('/site/siteajax.php',
	   		{f:'csid', sid:sid},
            function(rtn)
			{
				rtnobj=eval(rtn);
				if(typeof rtnobj != "undefined" && typeof rtnobj.em != "undefined"){
					setCookie('em',rtnobj.em,'session');
					setCookie('userdata',rtn,'session');
					setCookie('ud',rtn,'session');
					try{
					if(rtnobj.cakes && rtnobj.cakes.length>0){
						if(rtnobj.cakes.pref_myhome && rtnobj.cakes.pref_myhome=="ajax"){
							setCookie('myhome','ajax','never');	
						}
					}
					}catch(e){}
					vyew.gue_callback.apply(this, [rtnobj]);
				}else{
					vyew.gue_callback.apply(this, [false]);
				}
			});
	

	}else if(lID){
        var ref=fs_getCookie('ref');
        var adRef=fs_getCookie('adRef');
        if(!ref)ref="none";
        if(!adRef)adRef="none";
        $.post('/site/siteajax.php',
            {f:'clID', clID:lID, ref:ref, adRef:adRef},
            function (res)
			{	
				if(res){
					results=res.split(',');
					userEmail=results[0]; mid=results[1]; sid=results[2];
					var cookieexp=(getCookie('keepLoggedIn')=="1")?'never':'session'
					if(!cookieexp)cookieexp="session"
					setCookie('em',userEmail, cookieexp);
					if( !(getCookie('sid').length>5) )	
						setCookie('sid',sid,'session');
					if(userEmail.length>2)
						vyew.gue_callback.apply(this, [{em:userEmail, mid:mid, sid:sid}]);
					else {
						clearCookie("lID");
						vyew.gue_callback.apply(this, [false]);
					}
				}else{
					clearCookie("lID");
					vyew.gue_callback.apply(this, [false]);
				}
			}//func
		);//post
    }else{
		callback.apply(this,[false]);
    }
}

vyew.isEmailAddress=function(em)
{
	if (typeof em == "undefined") return false;
	if (typeof em == "object") em = em[0];
	em=''+em;
	if(em.match(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9]+$/)) return true;
	else return false;
}

vyew.updateObj=function(targObj, newVarsObj)
{
	if(typeof targObj != "object" || typeof newVarsObj != "object") return;
	for(var v in newVarsObj){
		targObj[v]=newVarsObj[v];
	}
}

vyew.clearCookies=function()
{
    clearCookie('em'); clearCookie('lID'); clearCookie('sid'); clearCookie("keepLoggedIn"); 
	clearCookie('userdata');
	clearCookie('ud');
    clearCookie('exp_uniqueid'); clearCookie('exp_userhash');
}

vyew.logout=function()
{
	vyew.clearCookies();
}







/**
 * ------------------------------------------------------------------
 *  MISCELLANEOUS
 * ------------------------------------------------------------------
 */

function empty(v){
  if(typeof v == "undefined" || v==null || v==undefined) return true;
  else return false;
}
function isDefined(obj){
    return !empty(obj);
}

function hasFirebug()
{
    if(typeof console == "undefined"){
        if(!window.loadFirebugConsole) return false;
        else window.loadFirebugConsole();
    }
    if(typeof console != "undefined" && console.debug) return true;
    return false;
}

function dbg()
{
    if (!hasFirebug()) return;
    var out="";
    for(var i=0;i<arguments.length;i++){ out+=arguments[i]+", "; }
    out=out.substr(0,out.length-2);
    console.debug(out);
}

function dbd(x)
{
    if (!hasFirebug()) return;
    console.debug('----------------');
    console.dir(x);
}

function isNumeric(n){
    return !isNaN(n);
}





/**
 * -------------------------------------------------------------------------
 * 		COOKIES
 * -------------------------------------------------------------------------
 */
function fs_getAllCookies(){
	return document.cookie;		
}

function fs_getCookie(a,isJson){
    var e, m=" "+document.cookie+";"
    var N=" "+a+"=",s=m.indexOf(N),r="";
    if(s!=-1){
        s+=N.length;
        e=m.indexOf(";",s);
        r=unescape(m.substring(s,e))
    }
    if(!r || r.length<1) return false;
    if(r.match(/ckjson.:1/) || r.match(/ckjson:1/) || isJson==true){
        try {
            r=JSON.decode(r);
            delete r.ckjson;
        }catch(e){ dbg('Err394x:Converting JSON') }
    }
    if(r=="false") r=false;
    return r
}

function fs_clearCookie(n){
    var e=new Date();
	e.setTime(e.getTime()-20000000);
	document.cookie=n+"=0; expires="+e.toGMTString() + "; path=/; domain="+fs_getHostname();
	document.cookie=n+"=0; expires="+e.toGMTString() + "; path=/;";
}

//allSubDomains is a bool. set true if you want to set to ".domain.com"
//which will be available to, and overwrite all subdomain cookies
function fs_setCookie(varName,varVal,exp,allSubDomains){
    varVal=(varVal==null)?'0':varVal
    if(typeof(varVal)!="string" && typeof(varVal)!="number"){
        varVal.ckjson=1;
        varVal=JSON.encode(varVal);
    }
    //escape semicolons
	try { varVal=varVal.replace(/;/g,"%3B") }catch(e){}
    var e=new Date();
    if(typeof(exp)=="undefined" || exp=="null" || exp==null || exp=="" || exp=="session"){
        exp=";";
    }else if (exp=="never"||exp=="forever")
    {
        e.setFullYear(e.getFullYear() + 10);
        exp="; expires=" + e.toGMTString();
    }else{
        e.setTime(e.getTime()+(60000*exp))
        exp="; expires=" + e.toGMTString();
    }
    var ck = varName+"=" + escape(varVal) + "; path=/;" + exp;
    if(allSubDomains==true) ck += " domain="+fs_getHostname()+";";
    document.cookie = ck;
//alert(ck);
//alert(document.cookie);
    return "1";
}



var clearCookie=fs_clearCookie;
var setCookie=fs_setCookie;
var getCookie=fs_getCookie;

function fs_getHostname()
{
    var h=document.location.host;
    var p=h.lastIndexOf('.');
    p=h.lastIndexOf('.',p-1);
    if (p>-1) h=h.substr(p+1);
    return h;         
}

//records all vyew cookies, clears them, then re-sets them
//this is to clear out the global subdomain cookies (.domain.com)
function resetVyewCookies(){
	var sid=getCookie("sid");
	var lID=getCookie("lID");
	var kli=getCookie("keepLoggedIn");
	clearCookie("sid"); clearCookie("lID"); clearCookie("keepLoggedIn");
	setCookie("sid",sid);
	if(lID && kli) setCookie("lID", lID, "forever");
	if(kli) setCookie("keepLoggedIn", kli, "forever");
}

/*
	CookieLib Docs
	v1.1
	v1.0
   	===== Purpose =====
	Provide set/get cookie support for flash
	
	\\
	===== How to use it =====
		1. copy cookieLib.js to the same place as your .html file which references your .swf
		2. put this lines in your .html file :
		---------------------------------------------------------------------------
			<script src="cookieLib.js" type="text/javascript"></script>
		---------------------------------------------------------------------------
		3. SET A COOKIE FROM FLASH:
		
			import flash.external.*;
			ExternalInterface.call("fs_setCookie", "cookieName", "cookieValue", "EXPIRATION");
			
			(expiration can be: "never", or "session" or a "number" representing minutes)
			(default expiration is "never")
			(session expires when the browser is closed)
			(minutes= "60" for 1 hour, "1440" for 1 day, etc...) 
			
		4. RETRIEVE A COOKIE FROM FLAH:
		
			import flash.external.*;
			var cookievalue = ExternalInterface.call("fs_getCookie", "cookieName");
	
*/




/******************************************************************************************
         vyew-site.js
 ******************************************************************************************/

/**
 * Vyew.com site js functions
 *	upports Top login/logout buttons from the html-header template
 */
 
var origLoginHTML;
var userEmail;
$( checkLogin );

function checkLogin(){
	if(typeof vyew != "undefined" && vyew.checkLogin){
		vyew.checkLogin(function(res)
		{	
			if(typeof res.em != "undefined"){
				updateView(res.em);
			}else{
				updateView(); }
	
			try{	
				if( typeof(onLoginInfo)=="function" ){
					onLoginInfo(res);
				}
			}catch(e){}
		},this);	
	}
}
    


function updateView(em)
{
    if(!origLoginHTML) origLoginHTML = $("#user-login").html(); 
    if(em && em.length > 2){
		var isGuest=(em.indexOf("@")==-1) ? true : false;
		var lg="Hello, ";
		if(isGuest) lg+="Guest";
		else lg+=em;
		if(urlSegment(0)=="vyewmypc") lg+=" | <a href='/go/desktop'>Share My Desktop</a>"
		
		if(isGuest) lg+=" | <a href='/go/start'>My Guest VyewBook</a>"
		else lg+=" |  <a href='/go'>My VyewBooks</a>"
		
		lg+="  | <a href='/go/logout' >Logout</a>";

		$("#user-login").html(lg).show();
		try{$("#loginlinks").hide()}catch(e){}
    }else{
		$("#user-login").html( origLoginHTML );
		try{
			if($("#loginlinks").show()) $("#user-login").hide();
		}catch(e){}
    }
	//sign in to ee, if not yet
	if(getCookie("sid") && getCookie('em')){
		var expuh=getCookie("exp_userhash");
		var expui=getCookie("exp_uniqueid");
		if(!(expuh.length > 5) || !(expui.length > 5)){
			$.post('/site/EESingleSignonAjax.php', {f:'sso'}, 
			function(ret)
			{
				ret=eval(ret);
				if(ret && ret.exp_uniqueid && ret.exp_userhash){
					if(getCookie('keepLoggedIn')=='1') expir="forever";
					else expir="session";
					setCookie('exp_uniqueid',ret.exp_uniqueid,expir);
					setCookie('exp_userhash',ret.exp_userhash,expir);
					//if in forum, then refresh once
					dfr=getCookie('didForumRefresh');
					dfr=(typeof dfr=="undefined" || dfr=="undefined")?0:dfr;
					if ( urlSegment(1)=="forum" && dfr<=5 ){
						dfr++;
						setCookie('didForumRefresh',dfr,'session');
						top.document.location.reload(true);
					}
				}
			});
		}
	}//if 
}
function dbg(x){
       if(typeof console != "undefined" && console.debug) console.debug(x);
}
function getUserEmail(){
	var lID=fs_getCookie('lID');
	if(lID){
	    var ref=fs_getCookie('ref');
	    var adRef=fs_getCookie('adRef');
	    if(!ref)ref="none";
	    if(!adRef)adRef="none";
		$.post('/site/siteajax.php',
			{f:'clID', clID:lID, ref:ref, adRef:adRef}, 
			gotResponseLID);
	}else{
	    updateView();
	}
}
function gotResponseLID(res)
{
    if(res){
		//res=eval(res);
        results=res.split(',');
        userEmail=results[0];
        mid=results[1];
        sid=results[2];
		//userEmail=res.em; mid=res.mid; sid=res.sid;
        var cookieexp=(getCookie('keepLoggedIn')=="1")?'never':'session'
        if(!cookieexp)cookieexp="session"
        //fs_setCookie('sid',sid, cookieexp);
        setCookie('em',userEmail, cookieexp);
		updateView(userEmail);
	}
}

function doLogout(){
	top.document.location='/go/logout';
	return;
    clearCookie('em'); clearCookie('lID'); clearCookie('sid'); clearCookie("keepLoggedIn");
    clearCookie('ud');
    clearCookie('exp_uniqueid'); clearCookie('exp_userhash');
    if(updateView) updateView();
    $("#user-login").append("<span id='tempnotice'><br/><b>You have been logged out.</b></span>");
    setTimeout("$('#tempnotice').hide('slow');",3000)
    if( typeof(onLogout)=="function" ){
        onLogout();
    }
}

if(typeof tr=="undefined")
{
	tr=function(x)
	{
		if(console!="undefined"){
			if(console.debug!="undefined"){
				console.debug(x);
			}
		}
	}
}



/**
 * Given a url: http://vyew.com/content/product/uses?a=1&b=2#hello
 * Examples:
 * 		urlSegment(0) = "content"
 *   	urlSegment(1) = "product"
 *   	urlSegment("#") = "hello"
 * 	 	urlSegment("?") = "a=1&b=2#hello"
 *   	urlSegment("?a") = "1"
 *   	urlSegment("?b") = "2"
 *		urlSegment("domain") = "vyew.com"
 *		urlSegment("base") = "http://vyew.com/content/product/uses"
 *		urlSegment("baserel") = /content/product/uses"
 *
 * TO SET THE URL HASH:
 *		top.location.hash = "abc"
 */
function urlSegment(num, win)
{
	if(!win) win=this;
    var loc=win.location.href.match(/\/\/(.*)/)[1];
    if (!loc) return "";
    if(!isNaN(num)){
		segs=loc.split("/");
        return segs[num+1];
    }else if(num=="#"){
        pl=loc.indexOf("#");
        if(pl==-1)return "";
        else {
            loc=loc.substr(pl+1);
            pl=loc.indexOf("?");
            if(pl==-1) return loc;
            else return loc.substr(0,loc.indexOf("?"));
        }
    }else if(num=="?"){
        pl=loc.indexOf("?");
        if(pl==-1)return "";
        else return loc.substr(pl+1);
    //check if "?variable"
    }else if(num.substr(0,1)=="?"){
        var getv=num.substr(1);
        if(loc.indexOf(getv)==-1) return '';
        pl=loc.indexOf("?");
        if(pl==-1) return "";
        var q=''+loc.substr(pl+1);
        if(q.indexOf(getv)==-1 || typeof q != "string") return '';
        var regx=new RegExp(getv+"=([^&#]*)");
        var res=q.match(regx)[1];
        return res;
    }else if(num=="domain"){
        return loc.match(/(.*?)\//)[1]
    }else if(num=="base"){
        var loc=win.location.href;
        pl=loc.indexOf("?");
        if(pl>=0) loc=loc.substr(0,pl);
        pl=loc.indexOf("#");
        if(pl>=0) loc=loc.substr(0,pl);
        return loc;
    }else if(num=="baserel"){
        var loc=win.location.href.match(/^.*?\/\/.*?(\/.*)/)[1];
        pl=loc.indexOf("?");
        if(pl>=0) loc=loc.substr(0,pl);
        pl=loc.indexOf("#");
        if(pl>=0) loc=loc.substr(0,pl);
        return loc;
    }

    return "";
}


/**
 * Returns specified segment after the hash (#) in url
 * A segment is text between "/" slashes
 * Examples with url : vyew.com/room#/abc/def/ghi
 *      hashUrlSegment(0) : "abc"  (leading slashes are removed)
 *      hashUrlSegment(1) : "def"
 *      hashUrlSegment() :
 * @param segNum - segment number
 * @return mixed - the segment specified or false
 */
function hashUrlSegment(segNum,win)
{
    if(!segNum) segNum=0;
    if(!win)win=this;
    var loc=this.location.href;
    pl=loc.indexOf("#");
    if(pl==-1) return false;
    if(!pl) return false;
    loc=loc.substr(pl+1)
    segs=loc.split("/");
    if(!segs[0]) segs.shift()
    return segs[segNum];
}




/*
//For Search Higllighting
var shOptions={exact:"partial", style_name_suffix:false};
$(function(){
	$(document).SearchHighlight(shOptions);
});
*/

