tb_pathToImage = window.cfg['viewpath']+"images/loadingAnimation.gif";

jQuery.noConflict();

//jQuery.getScript('https://s7.addthis.com/js/152/addthis_widget.js');

//jQuery.getScript(window.cfg['rootpath']+'view/js/leftnav.js');

//if(window.cfg['userid']==0){
    //jQuery(window).load(function(){loginwindow();});
//}

function loginwindow(){
    //alert( 'loginwindow' );
    //alert( window.cfg['rootpath'] );
    //shade1(window.cfg['rootpath']+'interim.php?couponId=67278',window.cfg['rootpath']+'getSessionId.php','456','330','Signup/Login box');
}

//addthis_pub             = 'Cashbaq'; 
//addthis_logo            = window.cfg['rootpath']+'images/logo.png';
//addthis_logo_background = 'EFEFFF';
//addthis_logo_color      = '666699';
//addthis_brand           = 'Cashbaq';
//addthis_options         = 'favorites, twitter, stumbleupon, delicious, myspace, facebook, google, live, digg, more';

cashbaq2={
    ajaxsavecoupon:new Array(),
    ajaxsaveproduct:new Array(),
    ajaxvotes:new Array(),
    ajaxfriends:new Array(),
    loginuserId:window.cfg['userid'],
    nologin:'nologin',
    merchantid:'',
    imageloaded:0,
    imageloadnumber:0,
    votetipwindow:window.cfg['mydontShow'],
    
    merchantpage:window.cfg['rootpath']+'merchant_jason.php',
    brandpage:window.cfg['rootpath']+'brands_jason.php',
    loadingHtml:'<img src="'+window.cfg['viewpath']+'images/loading01.gif" align="absmidle" width="24" height="24" /> Please wait loading',
    
    loadimage:function(imgs){
        cashbaq2.imageloadnumber+=imgs.length;
        for(i in imgs){
            objImage = new Image();
            objImage.src=imgs[i];
            objImage.onload=function(){
                cashbaq2.imageloaded++;
            }
        }
    },
    
    drag:function(o,ob,r,obj){
        try{o.firstChild.onmousedown=function(){return false;}}catch(ex){}
        o.onmousedown=function(evt){
            var d=document;if(!evt)evt=window.event;
            if (evt.button==1||evt.button==0){
                var x=evt.layerX?evt.layerX:evt.offsetX,y=evt.layerY?evt.layerY:evt.offsetY;
                var ox=obj?obj.offsetLeft:0,oy=obj?obj.offsetTop:0;
                if(o.setCapture)
                    o.setCapture();
                else if(window.captureEvents)
                    window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
                d.onmousemove=function(evt){
                    var mx,my;
                    evt=evt||window.event;
                    if(!evt.pageX)evt.pageX=evt.clientX;
                    mx=(ox?evt.pageX-ox:evt.pageX)+(window.event?parseInt(d.documentElement?d.documentElement.scrollLeft:d.body.scrollLeft):0);
                    if(!evt.pageY)evt.pageY=evt.clientY;
                    my=(oy?evt.pageY-oy:evt.pageY)+(window.event?parseInt(d.documentElement?d.documentElement.scrollTop:d.body.scrollTop):0);
                    var tx=mx-x,ty=my-y;
                    ob.style.left=(tx<r[0]?r[0]:tx>r[1]?r[1]:tx)+"px";
                    ob.style.top=(ty<r[2]?r[2]:ty>r[3]?r[3]:ty)+"px";
                }
                d.onmouseup=function(){
                    if(o.releaseCapture)
                        o.releaseCapture();
                    else if(window.captureEvents)
                        window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
                        d.onmousemove=null;
                        d.onmouseup=null;
                }
            }
        }
    },
    
    validateEmail:function(strValue){
        var tmpValue = cashbaq2.trimAll(strValue);
        if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(tmpValue)){
            return true;
        }
        return false;
    },
    
    validateNotEmpty:function(strValue){
        /************************************************
        DESCRIPTION: Validates that a string is not all blank (whitespace) characters.    
        PARAMETERS:
           strValue - String to be tested for validity   
        RETURNS:
           True if valid, otherwise false.
        *************************************************/
            var strTemp = strValue;
            strTemp = cashbaq2.trimAll(strTemp);
            if(strTemp.length > 0){
                return true;
            } 
            return false;

    },
    
    trimAll:function(strValue){
        /************************************************
        DESCRIPTION: Removes leading and trailing spaces.
        PARAMETERS: Source string from which spaces will be removed;
        RETURNS: Source string with whitespaces removed.
        *************************************************/
            var objRegExp = /^(\s*)$/;
            //check for all spaces
            if(objRegExp.test(strValue)) {
                strValue = strValue.replace(objRegExp, '');
                if( strValue.length == 0) {
                    return strValue;
                }
            }
            //check for leading & trailing spaces
            objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
            if(objRegExp.test(strValue)) {
                //remove leading and trailing whitespace characters
                strValue = strValue.replace(objRegExp, '$2');
            }
            return strValue;
    },

    headerhide:function(){
        if(jQuery('.header_02').css('display')!='none'){
            jQuery('.header_02').slideUp();
            jQuery('#headerArrow').html('<img src="'+window.cfg['viewpath']+'images/share.gif" border="0" align="absmiddle" />');
        }else{
            jQuery('.header_02').slideDown();
            jQuery('#headerArrow').html('<img src="'+window.cfg['viewpath']+'images/shareb.gif" border="0" align="absmiddle" />');
        }
    },
    couponsintrohide:function(linkobj){
        var o=jQuery(linkobj).parent().prev();
        if(o.css('display')=='none'){
            o.slideDown();
            jQuery(linkobj).parent().find('img').attr('src',window.cfg['viewpath']+"images/bararrow.png");
        }else{
            o.slideUp();
            jQuery(linkobj).parent().find('img').attr('src',window.cfg['viewpath']+"images/allow1.gif");
        }
        return;
    },
    
    reviewvote:function(votename,rId){
        jQuery.get(cashbaq2.merchantpage+'?act=reviewvote',{reviewId:rId,vote:votename},function(data){
            if(data!=''){
                jQuery('#reviewvoteshow_'+rId).html(data);
            }
        });
    },
    
    submittag:function(val,table,pid,inp){
        if(val==''){alert('Please enter a tag');return}
        cashbaq2._taginput=inp;
        jQuery('#submittagshow').html('<img src="'+window.cfg['viewpath']+'images/loading01.gif" align="absmidle" width="24" height="24" /> Please wait submiting...');
        jQuery.get(cashbaq2.merchantpage+'?act=saveTags',{tagName:val,tbl:table,productId:pid,showtags:1},function(data){
            if(data==cashbaq2.nologin){cashbaq2.showloginwindow();return;}
            if(data!=''){
                jQuery('#show_tags').html(data);
                jQuery('#submittagshow').html('');
            }
        });
    },
    
    deletetag:function(counttags,tagid,table,pid){
		if( counttags == 1 ) 
			document.getElementById( 'toptags' ).style.display = 'none';
        jQuery('#submittagshow').html('<img src="'+window.cfg['viewpath']+'images/loading01.gif" align="absmidle" width="24" height="24" /> Please wait refreshing');
        jQuery.get(cashbaq2.merchantpage+'?act=deleteTags',{tagId:tagid,productId:pid,tbl:table},function(data){
            if(data!=''){
                jQuery('#show_tags').html(data);
                jQuery('#submittagshow').html('');
            }
        });
    },
    
    submittagStore:function(val,inp){
        if(val==''){alert('Please, enter a tag');return}
			document.getElementById( 'toptags' ).style.display = 'block';	
        if (!validateXSS(val)) {alert('Please, enter valid format');return}
        cashbaq2._taginput=inp;
        jQuery('#submittagshow').html('<img src="'+window.cfg['viewpath']+'images/loading01.gif" align="absmidle" width="24" height="24" /> Please wait submiting...');
        jQuery.get(cashbaq2.merchantpage+'?act=saveTags',{tagName:val,tbl:5,productId:cashbaq2.merchantid,showtags:1},function(data){
            if(data==cashbaq2.nologin){cashbaq2.showloginwindow();return;}
            if(data!=''){
                jQuery('#show_tags').html(data);
                jQuery('#submittagshow').html('');
                jQuery('#tagStore').val('');
            }
        });
    },
    
    loadStroetag:function(merchantId){
        jQuery('#show_tags').load(cashbaq2.merchantpage+'?act=showstoretag&merchantId='+merchantId);
    },

    showloginwindow:function(){
        //alert( 'showloginwindow' );
        shade1('https://beta.cashbaq.com/interim.php?couponId=67278','https://beta.cashbaq.com/getSessionId.php','456','330','Signup/Login box');
        return;
        if(jQuery('#loginwindow').length<1){
            jQuery('body').append('<a href="'+window.cfg['rootpath']+'loginjason.php?act=ajaxwindow&height=240&width=400" title="Please Login..." class="loginwindow" id="loginwindow" style="display:none;"></a>');
            tb_init('a.loginwindow');
        }
        jQuery('#loginwindow').click();
    },

    savecoupon:function(cId,obj){
        cashbaq2.ajaxsavecoupon[cId]=obj;
        jQuery.get(cashbaq2.merchantpage+'?act=savecoupon',{couponId:cId},function(data){
            if(data==cashbaq2.nologin){cashbaq2.showloginwindow();return;}
            eval('var re='+data);
            jQuery(cashbaq2.ajaxsavecoupon[re.couponId]).parent().html(re.html);
        });
    },

    saveproduct:function(pId,obj){
        cashbaq2.ajaxsaveproduct[pId]=obj;
        jQuery.get(cashbaq2.merchantpage+'?act=saveproduct',{productId:pId},function(data){
        if(data==cashbaq2.nologin){cashbaq2.showloginwindow();return;}
            eval('var re='+data);
            jQuery(cashbaq2.ajaxsaveproduct[re.productId]).parent().html(re.html);
        });
    },

    setvote:function(type,t){
        jQuery("a[@name='store_vote']").removeClass();
        if(type!=jQuery("input[@name='voteType']").val()||jQuery("input[@name='voteType']").attr('remove')){
            jQuery("input[@name='voteType']").val(type);
            jQuery(t).addClass("my_"+type+"it");
            jQuery("input[@name='voteType']").attr('remove','');
        }else{
            jQuery("input[@name='voteType']").attr('remove',1);
        }
    },
    
    set_rating_func:function(votetype,idstr,vs,obj){
        jQuery("#set_rating").slideDown();
        //if(jQuery("#set_rating").html()==''){
            jQuery("#set_rating").html('<div class="ratingWindow">'+cashbaq2.loadingHtml+'</div>');
            jQuery.get(cashbaq2.merchantpage+'?act=store_rating&votetype='+votetype+'&merchantId='+cashbaq2.merchantid,function(data){
                if(data=='nologin'){
                    loginwindow();
                }else{
                    jQuery("#set_rating").html(data);
                }
            })
        //}else{
          //  jQuery("#my_set_"+votetype).click();
        //}
    },
    
    show_rating_func:function(){
        //jQuery("#ratings").slideDown();
        //jQuery("#ratings").html('<div class="ratingWindow">'+cashbaq2.loadingHtml+'</div>');
        jQuery.get(cashbaq2.merchantpage+'?act=show_rating&merchantId='+cashbaq2.merchantid,function(data){
            if(data=='nologin'){
                loginwindow();
            }else{
                jQuery("#ratings").html(data);
                jQuery('#ratings').show();
            }
        })
    },

    myvoteall:function(t,idstr,vs,obj){
        if(cashbaq2.votetipwindow!=1){
            jQuery("#set_rating").slideDown();
            if(jQuery("#set_rating").html()==''){
                jQuery("#set_rating").html('<div class="ratingWindow">'+cashbaq2.loadingHtml+'</div>');
                jQuery.get(cashbaq2.merchantpage+'?act=store_rating&votetype='+t+'&merchantId='+cashbaq2.merchantid,function(data){
                    if(data=='nologin'){
                        loginwindow();
                    }else{
                        jQuery("#set_rating").html(data);
                    }
                })
            }else{
                jQuery("#my_set_"+t).click();
            }
        }else{
            if(jQuery(obj).attr('class')!=''){
                cashbaq2.myvotesubmit("type="+t+"&idstring="+idstr+"&votes="+vs+"&remove_vote=1");
            }else{
                cashbaq2.myvotesubmit("type="+t+"&idstring="+idstr+"&votes="+vs);
            }
        }
    },
    
    firstVoteProcess:function(t,idstr,vs,obj, merchantName) {
        var place=jQuery(obj).offset();
        var topPos = '-160';
        var leftPos = '-80'; 
        var tipContent = '<form style="position:absolute;left:'+leftPos+'px;top:'+topPos+
            'px;" id="firstvoteform" name="firstvoteform" method="post" action="">'+ 
            '<table border="0" cellpadding="0" cellspacing="0">'+
            '<tr><td><img src="'+window.cfg['staticpath']+'images/voting_love_it_top.png" border="0" alt="" /></td></tr>'+
            '<tr><td height="80" valign="top" style="background:url('+window.cfg['staticpath']+
            'images/voting_love_it_bg.png) repeat-y;padding:0px 18px 0px 18px;">'+
            '<div style="margin:6px 0px 0px 0px;font-size:0px;"></div>'+

            '<div align="center">You <font class="my_' + t +'it">'+t+'</font><br>'+ merchantName +
            '.<br> Would you like to share why <br>with Cashbaq members?<br><br></div>'+
            '<div align="center"><img id="firstvote_yes" src="'+window.cfg['staticpath']+'images/voting_want_it_yes.png" alt="Yes" onclick="cashbaq2.firstVoteSubmit(0,\''+t+'\',\''+idstr+'\',\''+vs+'\',\''+merchantName+'\')"/>'+
            '<img id="firstvote_no" src="'+window.cfg['staticpath']+'images/voting_want_it_no.png" alt="No" onclick="cashbaq2.firstVoteSubmit(1,\''+t+'\',\''+idstr+'\',\''+vs+'\',\''+merchantName+'\')"/></div>'+
            '</td></tr><tr><td><div style="margin:0px 0px 0px 0px;"><img src="'+window.cfg['staticpath']+
            'images/voting_'+t.toLowerCase()+'_it_bottom.png" border="0" alt="" /></div></td></tr></table></form>';

        tipwindow.init(tipContent, place);
    },

    firstVoteSubmit:function(msg,t,idstr,vs, merchantName) {
		tipwindow.close();
		jQuery.get(cashbaq2.merchantpage+'?act=firstvoteprocess',{share:msg},function(data){
            cashbaq2.votetipwindow = msg;
    		//see CIT task #380
    		var firstVoteObj = document.getElementById('isFirstVote');
    		if (firstVoteObj) {
    			firstVoteObj.value = 0;
    		}
            cashbaq2.myvote(t,idstr,vs,cashbaq2.ajaxvotes[idstr], merchantName);
                });
	},

    myvote:function(t,idstr,vs,obj, merchantName) {
		cashbaq2.ajaxvotes[idstr]=obj;
		if(cashbaq2.loginuserId<1){cashbaq2.showloginwindow();return;}
		//see CIT task #380
		var firstVoteObj = document.getElementById('isFirstVote');
		var isFirstVote = (firstVoteObj) ? firstVoteObj.value : 0;
        
		if(isFirstVote == 1) {cashbaq2.firstVoteProcess(t,idstr,vs,obj, merchantName); return;}

		if(cashbaq2.votetipwindow!=1){
        
            var place=jQuery(obj).offset(),alertMsg='',btn='';
            var topPos = '-210';
            if (place.top < 200) topPos = -place.top + 1;
            var leftPos = '-80'; 
            if(jQuery(obj).attr('class')!=''){
                alertMsg='<div align="left">You have previously selected that you '+t+
                    ' it.<br> Do you want to remove that vote?</div>'+
                    '<div><input name="remove_vote" type="radio" id="remove_vote" value="1" checked="checked" />Yes <input type="radio" name="remove_vote" id="remove_vote" value="0" />No, add new comment.</div>';
				if (place.top > 260) topPos = '-260';
            }
            if (t.toLowerCase() == 'hate') {
                leftPos = '-168';
            }

           var tipContent = '<form style="position:absolute;left:'+leftPos+'px;top:'+topPos+'px;" id="voteform_smpl" name="voteform_smpl" method="post" action="">'+
            '<div style="position:absolute;left:226px;top:5px;">'+
            '<img src="'+window.cfg['staticpath']+'images/close_01.gif" border="0" style="cursor:pointer" onclick="tipwindow.close();"/></div>'+

          '<table border="0" cellpadding="0" cellspacing="0">'+
          '<tr><td><img src="'+window.cfg['staticpath']+'images/voting_love_it_top.png" border="0" alt="" /></td></tr>'+
          '<tr><td height="101" valign="top" style="background:url('+window.cfg['staticpath']+'images/voting_love_it_bg.png) repeat-y;padding:0px 18px 0px 18px;">'+
            '<div style="position:absolute;left:15px;top:9px;margin:0px;padding:0px;color:#555555;font-weight:bold;font-family:Helvetica;font-size:13px;text-align:left;">Tell us why you <font class="my_' + t +'it">' + t + '</font> it</div>'+
            '<div style="margin:6px 0px 0px 0px;font-size:0px;"></div>'+
            alertMsg + 
            '<div id="dtSelect"><select><option>Topics</option></select></div>'+
            '<div id="noTopic" style="display:none;"><span class="redcolor">Please select a topic</span></div>' +
            '<div><input style="width:95%" type="text" id="txtConversation" name="txtConversation" value="Subject"/></div>'+
            //'<textarea name="txtMessage" id="txtMessage" rows="3" style="width:95%;border: 2px solid #d0cfca;width:216px;"></textarea>'+
            '<textarea name="txtMessage" id="txtMessage" rows="3" style="width:95%;"></textarea>'+
            '<div style="margin:3px 18px 0px 0px;text-align:left;"><input type="checkbox" name="dotshow" id="dotshow" value="1" />'+
            '<em><font style="font-size:11px;" face="Arial, Helvetica, sans-serif" style="text-align:left;">Don\'t show again</font></em>'+
            '<input type="hidden" name="type" value="'+t+'" /><input type="hidden" name="idstring" value="'+idstr+'" />'+
            '<input type="hidden" name="votes" value="'+vs+'" />'+
            '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="image" id="vote_submit" src="'+window.cfg['staticpath']+'images/voting_want_it_post.gif" value="Post"/></div>'+
           '</td></tr><tr><td><div style="margin:0px 0px 0px 0px;"><img src="'+window.cfg['staticpath']+
           'images/voting_'+t.toLowerCase()+'_it_bottom.png" border="0" alt="" /></div></td></tr></table></form>';

            tipwindow.init(tipContent, place);
          if (merchantName == 'Cashbaq') {
                jQuery('#txtConversation').val('Message Center: Love it/Have it');
                jQuery('#txtConversation').css('display','none');
                jQuery('#dtSelect').css('display','none');
            }
		    jQuery.get(cashbaq2.merchantpage+'?act=discussTopicListAjax', {name:merchantName}, function(data){
                    jQuery('#dtSelect').html(data);
                    });
            jQuery(".dotshow").hover(function(){tipwindow.showtip(this);},function(){tipwindow.closetip();});
            //jQuery('#txtMessage').val(jQuery(obj).parent().parent().attr('myvotemessage'));
            jQuery("#voteform_smpl").submit(function(){
                cashbaq2.myvotesubmit(jQuery('#voteform_smpl textarea,#voteform_smpl input,#voteform_smpl select').serialize());
                return false;
            })
        }else{
            if(jQuery(obj).attr('class')!=''){
                cashbaq2.myvotesubmit("type="+t+"&idstring="+idstr+"&votes="+vs+"&remove_vote=1");
            }else{
                cashbaq2.myvotesubmit("type="+t+"&idstring="+idstr+"&votes="+vs);
            }
        }
    },
    
    myvotesubmit:function(msg){
        if (jQuery('#topicsList').val() == 0 && jQuery('#txtMessage').val() != '') {
            jQuery('#noTopic').css('display','block');
            return false;
        }
        //alert(msg);
        jQuery.ajax({
         type: "POST",
         url: cashbaq2.merchantpage+'?act=voteobject',
         data:msg,
         success: function(data){
                if(data==cashbaq2.nologin){cashbaq2.showloginwindow();return;}
                if(data==''){return;}
                eval('var re='+data);
                //alert(data);
                if(jQuery('#txtMessage').length>0){jQuery(cashbaq2.ajaxvotes[re.idstr]).parent().parent().attr('myvotemessage',jQuery('#txtMessage').val());}
                if (re.html != '') {
                    jQuery(cashbaq2.ajaxvotes[re.idstr]).parent().parent().html(re.html);
                }
                if(re.dotshow!=''){cashbaq2.votetipwindow=re.dotshow;}
                tipwindow.close();
                var id=new Array();
                id = re.idstr.split('-');
                if (cashbaq2.merchantid != '' && re.conversationId != '' && id[1] == cashbaq2.merchantid) {
                    getDiscussList('comments',re.topicId, re.conversationId,1);
                }
             } 
        });
        return false;
    },

    friendop:function(userid,act,obj, clearBackground){
        cashbaq2.ajaxfriends[userid]=obj;
        //alert("<?=jcr::path_url('')?>addAsAFriend_jason.php?act="+act+"&friendId="+userid);
        jQuery.get(window.cfg['rootpath']+"addAsAFriend_jason.php?act="+act+"&friendId="+userid,function(data){
            if(data!=''){
                eval('var re='+data);
                var p = jQuery(cashbaq2.ajaxfriends[re.userId]).parent().parent();
                jQuery(cashbaq2.ajaxfriends[re.userId]).parent().html(re.html);
                if (clearBackground) {
                    p.css('background-color','');
                }
            }
        });
    },

    ajaxlogin:function(){
        if(jQuery("#txtEmail").val()==''||jQuery("#txtPwd").val()==''){
            jQuery("#login_prompt").html('Please enter email and passowrd.');
            return;
        }
        jQuery("#login_prompt").html('Please waiting for validate...');
        jQuery.ajax({
            type: "GET",
             url: window.cfg['rootpath']+"loginjason.php",
             data:   "act=validate&"+jQuery('#loginform input').serialize(),
             success: function(msg){ 
                eval('var re='+msg);
                if(re.login==0){
                    jQuery("#login_prompt").html(re.errmsg);
                }else if(re.gopage!=''){
                    top.location.href=re.gopage;
                }else{
                    top.location.reload();
                }
             } 
        }); 
    },

    ajaxlogout:function(){
        jQuery.get(window.cfg['rootpath']+"login_jason.php?act=logout",function(data){
            if(data){
                top.location.reload();
            }
        })
    },

    store_loadtab:function(tabname,obj){
    		if(tabname!=''&&tabname!='tab_all'){
            if(jQuery('#'+tabname).length<1){
                if(jQuery('#store_tab_load').length<1){
                    var loading=document.createElement('div');
                    var jQtab=jQuery('.tab_body');
                    jQuery(loading).attr('id','store_tab_load');
                    jQuery(loading).html('<img src="'+window.cfg['viewpath']+'images/loading01.gif" align="absmidle" width="24" height="24" /> Please wait loading');
                    jQuery(jQtab[0]).before(loading);
                }else{
                    jQuery('#store_tab_load').show();
                }
                jQuery.get(cashbaq2.merchantpage+'?act='+tabname,{merchantId:cashbaq2.merchantid},function(data){
                    var tab=document.createElement('div');
                    var jQtab=jQuery('.tab_body');
                    jQuery(tab).addClass('tab_body');
                    jQuery(tab).attr('id',jQuery(data).find('tabname').html());
                    jQuery(tab).html(jQuery(data).find('data').html());
                    jQtab.hide();
                    jQuery(jQtab[jQtab.length-1]).after(tab);
                    jQuery('#store_tab_load').hide();
                    tb_init('a[@thickbox]');
                    return;
                });
            }else{
                jQuery('.tab_body').hide();
                jQuery('#'+tabname).show();
            }
        }else{
            jQuery('.tab_body').show();
        }
        if(tabname=='tab_products'){jQuery('#search_product_f').show();}
        if(tabname=='tab_brands'){jQuery('#search_brand_f').show();}
        
        if( tabname=='tab_all') {
        	jQuery('#tab_coupons').show();
        }
        
		if(tabname=='tab_discuss'){
			jQuery('#tab_discuss').show();
		}
		else {
			//jQuery('#tab_discuss').hide();
		}
        
        //jQuery('.store_tab li').attr('class','');
        //jQuery(obj).parent().attr('class','store_tab_selected');
        //jQuery('.store_tab li').css('backgroundImage','url(<?=jcr::path_url('viewPath')?>images/tab.gif)');
        //jQuery(obj).parent().css('backgroundImage','url(<?=jcr::path_url('viewPath')?>images/tabmouseover.gif)');
    },
    
    submitreview:function(form){
        jQuery("span[@err='1'],div[@err='1']").html('');
        if(!cashbaq2.validateNotEmpty(form.txtName.value)){
            jQuery("#txtName_msg").html('Please enter your name');
        }else if(!cashbaq2.validateNotEmpty(form.txtCity.value)){
            jQuery("#txtCity_msg").html('Please enter city');
        }else if(!cashbaq2.validateNotEmpty(jQuery('#cboState').val())){
            jQuery("#cboState_msg").html('Please select state');
        }else if(!cashbaq2.validateNotEmpty(form.txtSubject.value)){
            jQuery("#txtSubject_msg").html('Please enter title for your review');
        }else if(!cashbaq2.validateNotEmpty(form.txtReview.value)){
            jQuery("#txtReview_msg").html('Please enter review');
        }else{
            jQuery("#review_prompt").html('Please wait, Submiting...');
            jQuery.ajax({
                type: "POST",
                 url: cashbaq2.merchantpage,
                 data:   "act=postreview&"+jQuery('#reviewform input,#reviewform textarea,#reviewform select').serialize(),
                 success: function(msg){ 
                    if(isNaN(msg)){
                        jQuery("#review_prompt").html(msg);
                        jQuery("#review_prompt").css('color','red');
                    }else{
                        jQuery("#review_prompt").html('Your review has been saved. Thank you.');
                        jQuery("#review_prompt").css('color','green');
                        jQuery('#reviewform input[@type=\'text\'],#reviewform textarea,#reviewform select').val('');
                        setTimeout('jQuery("#reviewform").hide()',1500);
                    }
                 } 
            }); 
        }
        return false;
    },
    
    setcorefunc:function(event,o){
        var f=jQuery(o).offset();
        var title=['verypoor',' poor',' general','good','verygood']
        var score=(event.clientX-f.left)/13;
        score=score>5?5:score;
        jQuery(o).html('<input type="hidden" name="'+jQuery(o).attr('id')+'" value="'+score+'" />');
        for(var i=1;i<score;i++){
            jQuery(o).append('<img src="'+window.cfg['rootpath']+'images/nr/star.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }
        if(score>i-.5){
            jQuery(o).append('<img src="'+window.cfg['rootpath']+'images/nr/star.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }else if(score>i-.9){
            jQuery(o).append('<img src="'+window.cfg['rootpath']+'images/nr/star_gray.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }
        jQuery(o).attr('title',title[i-1]);
    },
    
    setcoresave:function(idstr,vs,pid){
        if (jQuery('#topicsList').val() == 0 && jQuery('#txtMessage').val() != '') {
            jQuery('#noTopic').css('display','block');
            return false;
        }
        jQuery("#set_rating_prompt").html('Submitting,Please wait...');
        var voteid=jQuery("#voteform input[@name='voteType']").val()+idstr;
        cashbaq2.ajaxvotes[idstr]=jQuery('#'+voteid)[0];
        var discussInfo = jQuery("#voteform textarea[@name='txtReview'],#voteform input[@name='txtConversation'],#voteform select[@name='topicsList']").serialize();
        cashbaq2.myvotesubmit("rtype=all&type="+jQuery("#voteform input[@name='voteType']").val()+(jQuery("#voteform input[@name='voteType']").attr('remove')==1?'&remove_vote=1':'')+"&idstring="+idstr+"&votes="+vs+"&"+discussInfo);
        //alert("act=postrating&merchantId="+pid+"&"+jQuery('#voteform input,#voteform textarea').serialize());
        jQuery.ajax({
            type: "POST",
             url: cashbaq2.merchantpage,
             data:   "act=postrating&merchantId="+pid+"&"+jQuery('#voteform input,#voteform textarea, #voteform select').serialize(),
             success: function(msg){ 
                eval('var re='+msg);
                jQuery("#set_rating_prompt").html(re.html);
                //getDiscussList('comments',re.topicId, re.conversationId,1);
                //list of discuss will be updated in cashbaq2.myvotesubmit method
                jQuery("#myvotemessage").attr("myvotemessage",re.txtReview);
                var rating = new Array();
                rating = re.rating.split(',');
                cashbaq2.showratingscore(jQuery('#rating_stars')[0],rating[0], rating[1], rating[2], rating[3], rating[4]);
                setTimeout('jQuery("#voteform").parent().parent().hide()',1000);
             } 
        }); 
        return false;
    },

    initratingscore:function(o,score){
        var title=['verypoor',' poor',' general','good','verygood']
        jQuery(o).html('');
        for(var i=1;i<score;i++){
            jQuery(o).append('<img src="'+window.cfg['staticpath']+'images/nr/star.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }
        if(score>i-.5){
            jQuery(o).append('<img src="'+window.cfg['staticpath']+'images/nr/star.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }else if(score>i-.9){
            jQuery(o).append('<img src="'+window.cfg['staticpath']+'images/nr/star_gray.gif" width="13" align="absmiddle" style="margin-top:1px" />');
        }
        jQuery(o).attr('title',title[i-1]);
    },

    buildStarsLine:function(score){
        var htmlStr = '';
        var i;
        for(i=0;i<score;i++){
            htmlStr += '<img src="'+window.cfg['staticpath']+'images/nr/star.gif" width="13" style="margin-top:1px" />';
        }
        for(;i<5;i++){
            htmlStr += '<img src="'+window.cfg['staticpath']+'images/nr/star_fullgray.gif" width="13" style="margin-top:1px" />';
        }
        return htmlStr;
    },

    showratingscore:function(o,score,pricing,shipping,productAvailability, customerSupport){
        jQuery(o).html('RATING '+ cashbaq2.buildStarsLine(score));
        var items = ['Pricing','Shipping','Product Availability','Customer Support'];
        var values = [pricing, shipping, productAvailability, customerSupport];
        var htmlStr2 = '<table border="0" cellspacing="2" cellpadding="2">';
        for(var i =0; i < 4; i++) {
            htmlStr2 += '<tr><td>'+items[i]+'</td><td>'+cashbaq2.buildStarsLine(values[i])+'</td></tr>';
        }
        htmlStr2 += '</table>';
        jQuery('#ratings').html(htmlStr2);
    }

}

var tipwindow={
    init:function(content,offset){
        if(jQuery('#_tipwindow').length<1){
            var _tipw=document.createElement('div');
            _tipw.id='_tipwindow';
            jQuery(_tipw).css({position:'absolute'});
            //jQuery(_tipw).html('<dl class="tipwindow"><dd class="tsilder"><div class="div"><p class="p"></p></div></dd><dd class="c"><div class="div"><p id="_tipwindow_content"></p></div></dd><dd class="bsilder"><div class="div"><p class="p">d</p></div></dd></dl>').appendTo('body');
            var tipHtml = '<div class="tipwindow"><span id="_tipwindow_content"></span></div>';
            jQuery(_tipw).html(tipHtml).appendTo('body');
        }else{
            var _tipw=jQuery('#_tipwindow')[0];
        }
        jQuery(_tipw).find('#_tipwindow_content').html(content);
        var d=document;
        var thebody={scrollTop:parseInt(d.documentElement?d.documentElement.scrollTop:d.body.scrollTop),
        scrollLeft:parseInt(d.documentElement?d.documentElement.scrollLeft:d.body.scrollLeft)};

        if(offset.top-jQuery(_tipw).height()<thebody.scrollTop){var bt='tipw_nt2.gif';var allowc='tsilder';}else{var bt='tipw_nt8.gif';var allowc='bsilder';}
        if(offset.left-jQuery(_tipw).width()<thebody.scrollLeft){var lr='r';}else{var lr='l';} 
        jQuery('#_tipwindow .p').html('');
        jQuery('#_tipwindow .'+allowc+' .p').html('<img id="_allow" src="'+window.cfg['viewpath']+'images/'+bt+'" border="0" />');
        var iX=offset.left,iY=offset.top;
        if(bt!='t'){iY=iY-jQuery('#_tipwindow').height();}
        else{iY=iY+10;}
        jQuery(_tipw).css({left:iX,top:iY});
        jQuery(_tipw).fadeIn();
    },
    
    close:function(){
        if(jQuery('#_tipwindow').length>0){jQuery('#_tipwindow').fadeOut();}
    },
    
    showtip:function(obj){
        if(jQuery('#_tipw').length<1){
            var _tipw=document.createElement('div');
            _tipw.id='_tipw';
            jQuery(_tipw).css({position:'absolute'});
            //jQuery(_tipw).html('<dl class="tipwindow"><dd class="tsilder"><div class="div"><p class="p"></p></div></dd><dd class="c"><div class="div"><p id="_tipwindow_content"></p></div></dd><dd class="bsilder"><div class="div"><p class="p">d</p></div></dd></dl>').appendTo('body');
            var tipHtml = '<div class="tipwindow"><span id="_tipwindow_content"></span></div>';
            jQuery(_tipw).html(tipHtml).appendTo('body');
        }else{
            var _tipw=jQuery('#_tipw')[0];  
        }
        jQuery('#_tipw .m_m').html(jQuery(obj).attr('mtitle'));
        var offset=jQuery(obj).offset();  
        var d=document;
        var thebody={scrollTop:parseInt(d.documentElement?d.documentElement.scrollTop:d.body.scrollTop),
        scrollLeft:parseInt(d.documentElement?d.documentElement.scrollLeft:d.body.scrollLeft)};
        if(offset.top-jQuery(_tipw).height()<thebody.scrollTop){var bt='tipw_nt2.gif';var allowc='tsilder';}else{var bt='tipw_nt8.gif';var allowc='bsilder';}
        if(offset.left-jQuery(_tipw).width()<thebody.scrollLeft){var lr='r';}else{var lr='l';} 
        jQuery('#_tipw .p').html('');
        jQuery('#_tipw .'+allowc+' .p').html('<img id="_allow" src="'+window.cfg['viewpath']+'images/'+bt+'" border="0" />');
        var iX=offset.left,iY=offset.top;
        if(bt!='t'){iY=iY-jQuery('#_tipw').height();}
        else{iY=iY+15;}
        jQuery(_tipw).css({left:iX,top:iY});
        jQuery(_tipw).fadeIn();
    },
    
    closetip:function(){
        if(jQuery('#_tipw').length>0){jQuery('#_tipw').fadeOut();}
    }
}

/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
 *  against the source tree, available from the Prototype darcs repository.
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.4.0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

  emptyFunction: function() {},
  K: function(x) {return x}
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}

/*--------------------------------------------------------------------------*/

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}
Object.extend(String.prototype, {
  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(eval);
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },

  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },

  toArray: function() {
    return this.split('');
  },

  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];

    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];

    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }

    return camelizedString;
  },

  inspect: function() {
    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
  }
});

String.prototype.parseQuery = String.prototype.toQueryParams;

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },

  detect: function (iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value >= (result || value))
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value <= (result || value))
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.collect(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.collect(Prototype.K);
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      iterator(value = collections.pluck(index));
      return value;
    });
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Object.extend(Array.prototype, Enumerable);

Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != undefined || value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  shift: function() {
    var result = this[0];
    for (var i = 0; i < this.length - 1; i++)
      this[i] = this[i + 1];
    this.length--;
    return result;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }
});
var Hash = {
  _each: function(iterator) {
    for (key in this) {
      var value = this[key];
      if (typeof value == 'function') continue;

      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject($H(this), function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  toQueryString: function() {
    return this.map(function(pair) {
      return pair.map(encodeURIComponent).join('=');
    }).join('&');
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }
}

function $H(object) {
  var hash = Object.extend({}, object || {});
  Object.extend(hash, Enumerable);
  Object.extend(hash, Hash);
  return hash;
}
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    do {
      iterator(value);
      value = value.succ();
    } while (this.include(value));
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
  },

  activeRequestCount: 0
}

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responderToAdd) {
    if (!this.include(responderToAdd))
      this.responders.push(responderToAdd);
  },

  unregister: function(responderToRemove) {
    this.responders = this.responders.without(responderToRemove);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (responder[callback] && typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },

  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      parameters:   ''
    }
    Object.extend(this.options, options || {});
  },

  responseIsSuccess: function() {
    return this.transport.status == undefined
        || this.transport.status == 0
        || (this.transport.status >= 200 && this.transport.status < 300);
  },

  responseIsFailure: function() {
    return !this.responseIsSuccess();
  }
}

Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
  },

  request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';

    try {
      this.url = url;
      if (this.options.method == 'get' && parameters.length > 0)
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;

      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.options.method, this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) {
        this.transport.onreadystatechange = this.onStateChange.bind(this);
        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
      }

      this.setRequestHeaders();

      var body = this.options.postBody ? this.options.postBody : parameters;
      this.transport.send(this.options.method == 'post' ? body : null);

    } catch (e) {
      this.dispatchException(e);
    }
  },

  setRequestHeaders: function() {
    var requestHeaders =
      ['X-Requested-With', 'XMLHttpRequest',
       'X-Prototype-Version', Prototype.Version];

    if (this.options.method == 'post') {
      requestHeaders.push('Content-type',
        'application/x-www-form-urlencoded');

      /* Force "Connection: close" for Mozilla browsers to work around
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
       * header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType)
        requestHeaders.push('Connection', 'close');
    }

    if (this.options.requestHeaders)
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);

    for (var i = 0; i < requestHeaders.length; i += 2)
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState != 1)
      this.respondToReadyState(this.transport.readyState);
  },

  header: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) {}
  },

  evalJSON: function() {
    try {
      return eval(this.header('X-JSON'));
    } catch (e) {}
  },

  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },

  respondToReadyState: function(readyState) {
    var event = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (event == 'Complete') {
      try {
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }

      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
        this.evalResponse();
    }

    try {
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + event, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
    if (event == 'Complete')
      this.transport.onreadystatechange = Prototype.emptyFunction;
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.containers = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.responseIsSuccess() ?
      this.containers.success : this.containers.failure;
    var response = this.transport.responseText;

    if (!this.options.evalScripts)
      response = response.stripScripts();

    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver, response);
      } else {
        Element.update(receiver, response);
      }
    }

    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = {};
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(child);
    return elements;
  });
}

/*--------------------------------------------------------------------------*/

if (!window.Element) {
  var Element = new Object();
}

Object.extend(Element, {
  visible: function(element) {
    return jQuery(element).style.display != 'none';
  },

  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = jQuery(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = jQuery(arguments[i]);
      element.style.display = 'none';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = jQuery(arguments[i]);
      element.style.display = '';
    }
  },

  remove: function(element) {
    element = jQuery(element);
    element.parentNode.removeChild(element);
  },

  update: function(element, html) {
	jQuery(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
  },

  getHeight: function(element) {
    element = jQuery(element);
    return element.offsetHeight;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = jQuery(element))) return;
    return Element.classNames(element).include(className);
  },

  addClassName: function(element, className) {
    if (!(element = jQuery(element))) return;
    return Element.classNames(element).add(className);
  },

  removeClassName: function(element, className) {
    if (!(element = jQuery(element))) return;
    return Element.classNames(element).remove(className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = jQuery(element);
    for (var i = 0; i < element.childNodes.length; i++) {
      var node = element.childNodes[i];
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        Element.remove(node);
    }
  },

  empty: function(element) {
    return jQuery(element).innerHTML.match(/^\s*$/);
  },

  scrollTo: function(element) {
    element = jQuery(element);
    var x = element.x ? element.x : element.offsetLeft,
        y = element.y ? element.y : element.offsetTop;
    window.scrollTo(x, y);
  },

  getStyle: function(element, style) {
    element = jQuery(element);
    var value = element.style[style.camelize()];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css.getPropertyValue(style) : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style.camelize()];
      }
    }

    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';

    return value == 'auto' ? null : value;
  },

  setStyle: function(element, style) {
    element = jQuery(element);
    for (name in style)
      element.style[name.camelize()] = style[name];
  },

  getDimensions: function(element) {
    element = jQuery(element);
    if (Element.getStyle(element, 'display') != 'none')
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = jQuery(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
  },

  undoPositioned: function(element) {
    element = jQuery(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
  },

  makeClipping: function(element) {
    element = jQuery(element);
    if (element._overflow) return;
    element._overflow = element.style.overflow;
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
  },

  undoClipping: function(element) {
    element = jQuery(element);
    if (element._overflow) return;
    element.style.overflow = element._overflow;
    element._overflow = undefined;
  }
});

var Toggle = new Object();
Toggle.display = Element.toggle;

/*--------------------------------------------------------------------------*/

/* Abstracts removed to save bandwidth */

/*--------------------------------------------------------------------------*/

/* Class Names removed to save bandwidth */

/*--------------------------------------------------------------------------*/

var Form = {
  serialize: function(form) {
    var elements = Form.getElements(jQuery(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = jQuery(form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = jQuery(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    jQuery(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
    element = jQuery(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];

      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },

  getValue: function(element) {
    element = jQuery(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}

/*--------------------------------------------------------------------------*/

var $F = Form.Element.getValue;

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {}
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = jQuery(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = jQuery(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    var elements = Form.getElements(this.element);
    for (var i = 0; i < elements.length; i++)
      this.registerCallback(elements[i]);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        case 'password':
        case 'text':
        case 'textarea':
        case 'select-one':
        case 'select-multiple':
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,

  element: function(event) {
    return event.target || event.srcElement;
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0; i < Event.observers.length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    var element = jQuery(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.attachEvent))
      name = 'keydown';

    this._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    var element = jQuery(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      element.detachEvent('on' + name, observer);
    }
  }
});

/* prevent memory leaks in IE */
Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  clone: function(source, target) {
    source = jQuery(source);
    target = jQuery(target);
    target.style.position = 'absolute';
    var offsets = this.cumulativeOffset(source);
    target.style.top    = offsets[1] + 'px';
    target.style.left   = offsets[0] + 'px';
    target.style.width  = source.offsetWidth + 'px';
    target.style.height = source.offsetHeight + 'px';
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent==document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      valueT -= element.scrollTop  || 0;
      valueL -= element.scrollLeft || 0;
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {})

    // find page position of source
    source = jQuery(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = jQuery(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = jQuery(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';;
    element.style.left   = left + 'px';;
    element.style.width  = width + 'px';;
    element.style.height = height + 'px';;
  },

  relativize: function(element) {
    element = jQuery(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
}

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}

function changeBGimage(image,newimage){
    if(image.style.background!="url(/images/tabmouseover.png)")
    image.style.background = "url('"+newimage+"')";
}

function mouseoverBGcolor(placeholder){
    placeholder.style.background="#e1f6ff";
}

function mouseoutBGcolorWhite(placeholder){
    placeholder.style.background="white";
}

function mouseoverBGcolorBlue(placeholder){
    placeholder.style.background="#f1f5fa";
}


var productSearchCheck = new Date();


function ajaxFunctionId(page,id){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById(id);
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
            if(ajaxDisplay.style.display == 'none') {
               ajaxDisplay.style.display = '';
            }
        }
    }   
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}

function ajaxFunctionIdTab(page,id,tabid,tabNumbers){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById(id);
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
            if(tabid > 0 ) {
                setSelectedTab(tabid - 1);
            }
        }
    }   
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}


function runSearch(page,id,timeRecord){
    if(timeRecord==productSearchCheck){
        ajaxFunctionId(page,id);
    }
}


function searchProducts(page,id,val,d){
productSearchCheck = new Date();
var productSearch = productSearchCheck;
var tString = "'"+page+"','"+id+"','"+productSearch+"'";
setTimeout("runSearch("+tString+")",300);
}


function shade(URL,page){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            if(ajaxRequest.responseText>0){
                window.open(URL+'&go=1');
            }
            else {
                //width and height of the box - can be left blank
                var wh = '500 400'; 
                // the caption (link's title) - can be blank
                var title = 'Some kind of caption';
                // the link URL
                if(URL.indexOf("?") > 0) {
                    var LinkURL = URL+'&URL='+escape(URL+'&go=1');
                }
                else {
                    var LinkURL = URL+'?URL='+escape(URL+'&go=1');
                }
                //var LinkURL = URL+'&URL='+escape(URL+'&go=1');
                MOOdalBox.open(LinkURL,title,wh);
            }                     
        }
    }   
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}



function shade1(URL,page,width,height,title){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var wh = width + ' ' + height;
            // the link URL
            if(URL.indexOf('?') > 0) {
                var LinkURL = URL+'&URL='+escape(URL+'&go=1');
            }
            else {
                var LinkURL = URL+'?URL='+escape(URL+'&go=1');
            }
            MOOdalBox.open(LinkURL,title,wh);
        }
    }   
    //alert( page );
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
    //alert( ajaxRequest.statusText );
    //alert( ajaxRequest.responseText );
}

function shade2(URL,page,width,height,title){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var wh = width + ' ' + height;
            if(URL.indexOf('?') > 0) {
                var LinkURL = URL+'&URL='+escape("<?=PROTOCOL?>://beta.cashbaq.com/accountinfo.php");
            }
            else {
                var LinkURL = URL+'?URL='+escape("<?=PROTOCOL?>://beta.cashbaq.com/accountinfo.php");
            }
            MOOdalBox.open(LinkURL,title,wh);                          
        }
    }   
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
    //alert( ajaxRequest.responseText );
}

function loginajax(page,URL){
    var message = "";
//  alert( page );
//  alert( URL );
    //alert( "testing" );
    if(document.getElementById('emailLI').value.length && document.getElementById('passwordLI').value.length){
        var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("!");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var content = ajaxRequest.responseText;
                
                if(content=='YES'){
                    MOOdalBox.close(true);
                    document.location.href=URL;
                }
                else if(('x'+content).search('LOGINCODE')>0) {
                    alert('Your login code has been used by another user or your login code is invalid.');
                    content = content.replace('LOGINCODE','');
                    //shade1('http://beta.cashbaq.com/ajaxlogincode.php?'+content+'&couponId=67278','http://beta.cashbaq.com/getSessionId.php','320','180','Login code box');
                }
                else if(('x'+content).search('userId=')>0) {
                    //shade1('http://beta.cashbaq.com/ajaxlogincode.php?'+content+'&couponId=67278','http://beta.cashbaq.com/getSessionId.php','320','180','Login code box');
                }               
                else if(content=='INVALID') {
                    alert('Invalid user name/password!');
                }               
                else
                {
                    //alert(ajaxRequest.responseText);
                }
            }
        }
        if(document.getElementById('remembermeLI').checked==true) var rem = 'Y';
        //alert( page );
        ajaxRequest.open("GET", page+'?email='+escape(document.getElementById('emailLI').value)+'&password='+escape(document.getElementById('passwordLI').value)+'&remember='+rem+'&betacode='+escape(document.getElementById('betacodeLI').value), true);
        ajaxRequest.send(null);
    }
    if(document.getElementById('emailLI').value.length==0)
    {
        message=message+'Please enter your email!\n';
    }
    if(document.getElementById('passwordLI').value.length==0)
    {
        message=message+'Please enter your password!';
    }

    if(message.length>0) alert(message);
    return false;
}
/*
* "Session Ready" handler. This is called when the facebook
* session becomes ready after the user clicks the "Facebook login" button.
* In a more complex app, this could be used to do some in-page
* replacements and avoid a full page refresh. For now, just
* notify the server the user is logged in, and redirect to home.
*
* @param link_to_current_user  if the facebook session should be
*                              linked to a currently logged in user, or used
*                              to create a new account anyway
*/
function facebook_onlogin(redirectUrl) {

   FB.Facebook.get_sessionState().waitUntilReady(function() {
       var user = FB.Facebook.apiClient.get_session() ? FB.Facebook.apiClient.get_session().uid : null;
       // probably should give some indication of failure to the user
       if (!user) {
           showErrorOnSignup('fb_signup_error',"Could not get userID from Facebook","red");
           return;
       } else {
       	showErrorOnSignup('fb_signup_error',"","red");
       }
       // The Facebook Session has been set in the cookies,
       // which will be picked up by the server on the next page load
       // so refresh the page, and let all the account linking be
       // handled on the server side

       // This could be done a myriad of ways; for a page with more content,
       // you could do an ajax call for the account linking, and then
       // just replace content inline without a full page refresh.
       //refresh_page();
       jQuery.get('fb_check.php',{fb_uid:user},function(data){
           if(data!=''){
               switch (data) {
               	case 'NOT_FB_FOUND':
                       showErrorOnSignup('fb_signup_error',"Could not get user data from Facebook","red");
                       break;
                   default:
                       showErrorOnSignup('fb_signup_error',"Processing ...","green");
                       eval(data);
               }
           }
       });
   });
}

var loginData = null;
function loginAjaxWithoutPopup(page,URL){
    var message = "";
    if (loginData) {
    	var rem = (loginData.email && loginData.password) ? "Y" : ""; 
    	var email = loginData.email;
    	var password = loginData.password;    	
    } else { 
    	var email = document.getElementById('email').value;
    	var password = document.getElementById('password').value;
    }
    if (!email && !password) {
        return false;
    }
    changeButtonStyle('loginButton','buttonDisable','Checking ...',1);
    if (!email || (email && !validateEmail(email)) ) {
        message='Please enter correct your email';
        showErrorOnSignup('email_error',message);
    } else {
        showErrorOnSignup('email_error','&nbsp;');
    }
    if(!password)
    {
        message='Please enter your password';
        showErrorOnSignup('password_error',message);
    } else {
        showErrorOnSignup('password_error','&nbsp;');
    }
    if (message) {
        changeButtonStyle('loginButton','button','Login',0);
        return false;
    }       
    if(document.getElementById('rememberme').checked==true) rem = 'Y';
    if(email && password){
        jQuery.get(page,{isFromFB:(loginData ? 1 : 0),email:email,password:password,remember:rem},function(content){
            if(content!=''){
                if(content=='YES'){
                    changeButtonStyle('loginButton','buttonDisable','Logging in ...',1);
                    if (loginData) {
                    	showErrorOnSignup('fb_signup_error',"Logging in ...","green");
                    }
                    document.location.href=URL;
                }
                else if(content=='INVALID') {
                    message = 1;
                    if (loginData) {
                    	showErrorOnSignup('fb_signup_error',"Could not log you in.","red");
                    } else {
                    	showErrorOnSignup('email_error','Could not log you in. Please check');
                    	showErrorOnSignup('password_error','your email and password');
                    }
                }               
                else
                {
                    message = 'ServerError! Can not get response';
                }
                if (message) {
                    changeButtonStyle('loginButton','button','Login',0);
                }
            }
        });     	
    }   
    return false;
}

function changeButtonStyle(id,className,txt,disabled) {
    var button = document.getElementById(id);
    button.disabled = disabled;
    if (button && className) {
        button.className = className;
    }
    if (txt) {
        button.value = txt;
    }
}

function logincodeajax(page,URL){
    var message = "";
    if(document.getElementById('txtloginCode').value.length ){
        var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("!");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var content = ajaxRequest.responseText;
                if(content=='YES'){
                    MOOdalBox.close(true);
                    document.location.href=URL;
                    //document.location.reload();
                }
                else if(('x'+content).search('LOGINCODE')>0) {
                    alert('Your login code has been used by another user or your login code is invalid.');
                    content = content.replace('LOGINCODE','');
                    //shade1('http://beta.cashbaq.com/ajaxlogincode.php?'+content+'&couponId=67278','http://beta.cashbaq.com/getSessionId.php','320','180','Login code box');
                }
                else
                {
                    alert(ajaxRequest.responseText);
                }     
            }
        }
        //alert(page+'&logincode='+escape(document.getElementById('txtloginCode').value));
        ajaxRequest.open("GET", page+'&logincode='+escape(document.getElementById('txtloginCode').value), true);
        ajaxRequest.send(null);
    }
    if(document.getElementById('txtloginCode').value.length==0)
    {
        message=message+'Please enter your login code!\n';
    }

    if(message.length>0) alert(message);
    return false;
}

function forgotpwdajax(page,URL){
    var message = "";
    var msgField = document.getElementById('ajaxForgotMessage');
    if(document.getElementById('forgotEmail').value.length ){
        var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("! Can not get ajax object");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var content = ajaxRequest.responseText;
                if(content=='YES'){
                    var ajaxDisplay = document.getElementById('ajaxForgotPWMessage');
                    ajaxDisplay.innerHTML = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2"><font class="contenttext" style="font-size:14px;">Your new password has been sent to your e-mail, please check your email and use it to <a href="/login.php">login</a>!</font></td></tr><tr><td colspan="2" align="right" class="contenttext">&nbsp;</td></tr></table>';
                }
                else
                {
                    if (msgField) {
                        showErrorOnSignup('ajaxForgotMessage',ajaxRequest.responseText);
                    } else {
                        alert(ajaxRequest.responseText);
                    }
                }     
            }
        }
        ajaxRequest.open("GET", page+'?email='+escape(document.getElementById('forgotEmail').value), true);
        ajaxRequest.send(null);
    }
    if(document.getElementById('forgotEmail').value.length==0)
    {
        message=message+'Please enter your email!\n';
    }   
    if(message.length>0) {
        if (msgField) {
            showErrorOnSignup('ajaxForgotMessage',message);
        } else {
            alert(message);
        }
    }
    return false;
}

function signupajax(page,URL){
    var message = "";
    if(document.getElementById('emailSU').value.length && document.getElementById('passwordSU').value.length && document.getElementById('passwordConfirmationSU').value.length && document.getElementById('siteTermsSU').checked){
        var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("!");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var content = ajaxRequest.responseText;
                if(content=='YES'){
                    MOOdalBox.close(true);          
                    document.location.href=URL;
                    //document.location.reload();
                }
                else if(('x'+content).search('LOGINCODE')>0) {
                    alert('Your login code has been used by another user or your login code is invalid.');
                    content = content.replace('LOGINCODE','');
                    //shade2('http://beta.cashbaq.com/ajaxlogincode.php?'+content+'&couponId=67278','http://beta.cashbaq.com/getSessionId.php','320','180','Login code box');
                }
                else if(('x'+content).search('userId=')>0) {
                    //shade2('http://beta.cashbaq.com/ajaxlogincode.php?'+content+'&couponId=67278','http://beta.cashbaq.com/getSessionId.php','320','180','Login code box');
                }
                else if(content=='EMAIL') {
                    alert('Email already exists.');
                }
                else if(content=='HANDLE') {
                    alert('Handle already exists.');
                }
                else if(content=='INVALID') {
                    alert('Invalid user name/password!');
                }               
                else
                {
                    alert(ajaxRequest.responseText);
                }     
            }
        }
        var rem = 'N';
        ajaxRequest.open("GET", page+'?email='+escape(document.getElementById('emailSU').value)+'&password='+escape(document.getElementById('passwordSU').value)+'&remember='+rem+'&betacode='+escape(document.getElementById('betacodeSU').value),true);
        ajaxRequest.send(null);
    }
    if(document.getElementById('emailSU').value.length==0)
    {
        message=message+'Please enter your email!\n';
    }
    if(document.getElementById('passwordSU').value.length==0)
    {
        message=message+'Please enter your password!\n';
    }
    if(document.getElementById('passwordConfirmationSU').value.length==0)
    {
        message=message+'Please enter your confirm password!\n';
    }
    if(document.getElementById('passwordSU').value != document.getElementById('passwordConfirmationSU').value)
    {
        message=message+'Passwords not matched!\n';
    }
    if(!document.getElementById('siteTermsSU').checked)
    {
        message=message+'You must accept the Site Terms to sign up.\n';
    }
    if(message.length>0) alert(message);
    return false;
}
//Facebook data
var fbData = null;
function signupAjaxWithoutPopupFromFB(page,URL,isFirst, minLen){
	//alert( 'signup');
    var message = "";
   	jQuery('#loginBlock').hide();
   	jQuery('#signupBlock').hide();
   	//show FBname
   	if (fbData.uname) {
   		jQuery('#fbName').html(fbData.uname);
   	} else if (fbData.fname) {
   		jQuery('#fbName').html(fbData.fname);
   	} else {
   		jQuery('#fbName').html("Facebook user");
   	}
   	//end show FB name
   	//show FB pic
   	if (fbData.pic) {
   		jQuery('#fbPIC').html('<img style="margin:0px 10px 0px 0px;" src="'+fbData.pic+'">');
   	}
   	//end show FB pic
   	jQuery('#FBconnectSignUp').show();
    //define controlls
    var email = escape(document.getElementById('s_email2').value);
    var uname = (!document.getElementById('s_uname2').value) ? fbData.uname : document.getElementById('s_uname2').value;
  //  alert( uname );
    var pwd = escape(document.getElementById('s_pwd2').value);
    changeButtonStyle('signupButton2','buttonDisable','Checking username availability ...',1);
    //validate required
    if (!isFirst) {
    	if(!email)
    	{
    		message='Please enter your email';
    		showErrorOnSignup('s_email2_error',message);
    	} else if (!validateEmail(email)) {
    		message='Email address is invalid';
    		showErrorOnSignup('s_email2_error',message);
    	} else {
    		showErrorOnSignup('s_email2_error','&nbsp;');
    	}
    	if(!uname)
    	{
    		message='Please enter username';
    		showErrorOnSignup('s_uname2_error',message);
    	} else if (!validateXSS(uname)) {
    		message='Please use a valid format';       
    		showErrorOnSignup('s_uname2_error',message);     
    	} else if( !validateUName(uname)) {
    		message='Please use a valid format';       
    		showErrorOnSignup('s_uname2_error',message);     
    	} else if( !validateUNameLen(uname, minLen)) {
    		message='Username is too short';         
    		showErrorOnSignup('s_uname2_error',message);     
    	}
    	else {
    		showErrorOnSignup('s_uname2_error','&nbsp;');
    	}
    } else {
    	message = 1;
    }
    if(message) {
        changeButtonStyle('signupButton2','button','Sign Up',0);
        return false;
    }
    
        
    if(email || uname){
        jQuery.get(page,{isFBdata:1,email:email,uname:uname,firstname:fbData.fname,lastname:fbData.lname,city:fbData.city,state:fbData.state,zipcode:fbData.zipcode,alerts:'Daily',password:pwd,pic:fbData.pic},function(content){
            if(content!=''){
                showErrorOnSignup('s_email2_error','&nbsp;');    
                showErrorOnSignup('s_uname2_error','&nbsp;');    
               // alert( content );
                if(content === 'YES'){
                    changeButtonStyle('signupButton2','buttonDisable','Processing ...',1);
                    document.location.href=URL;
                }
                else if(content === 'EMAIL') {
                    message='Email already exists';
                    showErrorOnSignup('s_email2_error',message);                     
                }
                else if(content === 'HANDLE') {
                    message='Username already exists';
                    showErrorOnSignup('s_uname2_error',message);                 
                }
                else if(content === 'BANNED') {
                	message='Incorrect username';
                	showErrorOnSignup('s_uname2_error',message);
                }
                else if(content === 'UNAME_FAIL') {
                	message='Incorrect username';
                	showErrorOnSignup('s_uname2_error',message);
                }
                else if (content === 'ENTER_PWD_BOTH' || content === 'ENTER_PWD_UNAME' 
                			|| content === 'ENTER_PWD_EMAIL' || content === 'ENTER_WRONG_PWD_EMAIL') {
                	switch (content) {
                    	case 'ENTER_PWD_BOTH':
                    		message = 'The Cashbaq email and username you entered already exists. Please confirm this is your account by entering your Cashbaq password or use a different e-mail address and username.';
                    		break;
                    	case 'ENTER_PWD_UNAME':
                    		message = 'The Cashbaq username you entered already exists. Please confirm this is your account by entering your Cashbaq email and Cashbaq password or use a different username.';
                    		break;
                    	case 'ENTER_PWD_EMAIL':
                    		message = 'The Cashbaq email you entered already exists. Please confirm this is your account by entering your Cashbaq password or use a different e-mail address.';
                    		break;
                    	case 'ENTER_WRONG_PWD_EMAIL':
                    		message = 'Could not log you in. Please check your Cashbaq email address and password.';
                    		break;
                    }                    
                    showErrorOnSignup('s_pwd2_error',message);
                    //if (content === 'ENTER_WRONG_PWD_EMAIL') {
                    	//showErrorOnSignup('s_pwd3_error',"wrong password");
                    //} else {
                    	//showErrorOnSignup('s_pwd3_error',');
                    //}
                    jQuery('#s_pwd2').val("");
                	jQuery('#checkPWD').show();                	
                }
                if (message) {
                    changeButtonStyle('signupButton2','button','Sign Up',0);
                }  
            }
        });    	
    	
    }
    return false;
}
function signupAjaxWithoutPopup(page,URL,minLen){
    var message = "";
    var email = escape(document.getElementById('s_email').value);
    var pwd = escape(document.getElementById('s_password').value);
    var pwd2 = escape(document.getElementById('s_repass').value);
    var uname = escape(document.getElementById('s_uname').value);
    var fname = escape(document.getElementById('s_fname').value);
    var lname = escape(document.getElementById('s_lname').value);   
    var f_payemail = escape(document.getElementById( 's_payemail' ).value);
    var f_street1 = escape(document.getElementById( 's_address1' ).value);
	var f_street2 = escape(document.getElementById( 's_address2' ).value);
	var f_city = escape(document.getElementById( 's_city' ).value);
	var f_state = escape(document.getElementById( 's_state' ).value);
	var f_zipcode = escape(document.getElementById( 's_zipcode' ).value);   
	var f_challenge = document.getElementById( 'recaptcha_challenge_field' ).value;
	var f_response = document.getElementById( 'recaptcha_response_field' ).value;   
    var alerts = 'Daily';
    if( document.getElementById( 'weekly' ).checked ) {
        alerts = 'Weekly';
    } else if( document.getElementById( 'none' ).checked ) {
        alerts = 'Never';   
    }       
    //end define
    changeButtonStyle('signupButton','buttonDisable','Checking username availability ...',1);
    //validate required
    if(!email)
    {
        message='Please enter your email';
        showErrorOnSignup('s_email_error',message);
    } else if (!validateEmail(email)) {
        message='Email address is invalid';
        showErrorOnSignup('s_email_error',message);
    } else {
        showErrorOnSignup('s_email_error','&nbsp;');
    }
    if( f_payemail && !validateEmail(f_payemail) ) {
        message='PayPal email address is invalid';
        showErrorOnSignup('s_payemail_error',message);
    } else {
        showErrorOnSignup('s_payemail_error','&nbsp;');
    }
    if(!uname)
    {
        message='Please enter username';
        showErrorOnSignup('s_uname_error',message);
    } else if (!validateXSS(uname)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_uname_error',message);     
    }
	else if (!validateUName(uname)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_uname_error',message);     
    }
	else if( !validateUNameLen(uname, minLen)) {
    	message='Username is too short';       
    	showErrorOnSignup('s_uname_error',message);     
    }
    else {
        showErrorOnSignup('s_uname_error','&nbsp;');
    }
    if(!pwd)
    {
        message='Please enter password';
        showErrorOnSignup('s_password_error',message);
    } else if (!validateXSS(pwd)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_password_error',message);      
    } else {
        showErrorOnSignup('s_password_error','&nbsp;');
    }
    if(!pwd2)
    {
        message='Please confirm password';
        showErrorOnSignup('s_repass_error',message);
    } else {
        showErrorOnSignup('s_repass_error','&nbsp;');
    }
    if(pwd && pwd2 && pwd != pwd2)
    {
        message='Please verify your password again';
        showErrorOnSignup('s_repass_error',message);
    } else if (pwd && pwd2) {
        showErrorOnSignup('s_password_error','&nbsp;');
    }
    if(!document.getElementById('siteTerms').checked)
    {
        message='You must accept "Cashbaq Terms and Conditions" to sign up';
        showErrorOnSignup('siteTerms_error',message);
    } else {
        showErrorOnSignup('siteTerms_error','&nbsp;');
    }
    //validate additional XSS
    if (fname && !validateXSS(fname)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_fname_error',message);
    } else {
        showErrorOnSignup('s_fname_error','&nbsp;');
    }
    if (lname && !validateXSS(lname)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_lname_error',message);
    } else {
        showErrorOnSignup('s_lname_error','&nbsp;');
    }
    if (f_street1 && !validateXSS(f_street1)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_street1_error',message);
    } else {
        showErrorOnSignup('s_street1_error','&nbsp;');
    }
    if (f_street2 && !validateXSS(f_street2)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_street2_error',message);
    } else {
        showErrorOnSignup('s_street2_error','&nbsp;');
    }
    if (f_city && !validateXSS(f_city)) {
        message='Please use a valid format';       
        showErrorOnSignup('s_city_error',message);
    } else {
        showErrorOnSignup('s_city_error','&nbsp;');
    }
    if (f_zipcode && (!validateXSS(f_zipcode) || isNaN(f_zipcode))) {
        message='Please use a valid format';       
        showErrorOnSignup('s_zipcode_error',message);
    } else {
        showErrorOnSignup('s_zipcode_error','&nbsp;');
    }               
    
    if(message) {
        changeButtonStyle('signupButton','button','Sign Up',0);
        return false;
    }
    
    if(email && pwd && uname){
        var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("!");
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var message = "";
                var content = ajaxRequest.responseText;
                showErrorOnSignup('s_email_error','&nbsp;');    
                showErrorOnSignup('s_uname_error','&nbsp;');    
                showErrorOnSignup('captchaCode_error','&nbsp;');
                showErrorOnSignup('s_email_error','&nbsp;');
                if(content=='YES'){
                    changeButtonStyle('signupButton','buttonDisable','Processing ...',1);
                    document.location.href=URL;
                }
                else if(content=='EMAIL') {
                    Recaptcha.reload();
                    message='Email already exists';
                    showErrorOnSignup('s_email_error',message);                     
                }
                else if(content=='HANDLE') {
                    Recaptcha.reload();
                    message='Username already exists';
                    showErrorOnSignup('s_uname_error',message);                 
                }
                else if(content=='CAPTCHA') {
                    Recaptcha.reload();
                    message='Incorrect captcha';
                    showErrorOnSignup('captchaCode_error',message);
                } 
                else if(content=='BANNED') {
                	Recaptcha.reload();
                	message='Incorrect username';
                	showErrorOnSignup('s_uname_error',message);
                }
                else if(content=='UNAME_FAIL') {
                	Recaptcha.reload();
                	message='Incorrect username';
                	showErrorOnSignup('s_uname_error',message);
                }
                else
                {
                    Recaptcha.reload();
                    message='Can not get server response';
                    showErrorOnSignup('s_email_error',message);
                }   
                if (message) {
                    changeButtonStyle('signupButton','button','Sign Up',0);
                }               
            }
        }
        //params
        var params = "email="+email+"&password="+pwd+"&alerts="+alerts+"&uname="+uname;        
        if( f_payemail )
            params = params+"&payemail="+f_payemail;
        if( fname )
            params = params+"&firstname="+fname;
        if( lname )
            params = params+"&lastname="+lname;
        if( f_street1 )
            params = params+"&street1="+f_street1;
        if( f_street2 )
            params = params+"&street2="+f_street2;
        if( f_city )
            params = params+"&city="+f_city;
        if( f_state )
            params = params+"&state="+f_state;
        if( f_zipcode )
            params = params+"&zipcode="+f_zipcode;
        params = params+"&cap_chal="+f_challenge;
        params = params+"&cap_resp="+f_response;
        //end params
        ajaxRequest.open("GET", page+'?'+params,true);
        ajaxRequest.send(null);
    }
    return false;
}

function showErrorOnSignup(idField,msg,color) {
    var fieldObj = document.getElementById(idField);
    if (fieldObj) {
        fieldObj.innerHTML = "<strong>"+msg+"</strong>";
        if (msg === '&nbsp;' || msg === '') {
        	fieldObj.style.display = "none";
        } else {
        	fieldObj.style.display = "inline";
        }
        if (color) {
        	fieldObj.style.color = color;
        }
    }
}

/*
pid is the merchantId or productId or brandId
tbl is merchant or product or brand
vt is vote type ,such as want it,love it or hate it
*/
function votesajax(page,y,x,pid,vt,tbl,show){
    var sessionUserId = document.getElementById('sessionUserId').value;
    if(!sessionUserId) {
        MOOdalBox.open( // case matters
                 page+'&URL='+escape(page+'&go=1'), // the link URL
                 "Some kind of caption", // the caption (link's title) - can be blank
                 "500 400" // width and height of the box - can be left blank
              );
        return false;
    }
    if(page) {
        if(vt == 'love') {
            var displayColor = 'green';
        }
        else if(vt == 'hate') {
            var displayColor = 'red';
        }
        else {
            var displayColor = 'blue';
        }
        var usershowId = 'usershow';
        if(show == 'N') {
            show = document.getElementById(usershowId).innerHTML;
        }
        if(show == 'Y') {
            closeVoteWin(vt,tbl,pid,show);
            var url = '/votesajaxpost.php?pid='+pid+'&tbl='+tbl+'&vt='+vt+'&checkbox='+show;
            ajaxFunctionPost(url);
            backData('/votesajaxback.php',pid,tbl,vt,show);
        }
        else {
            //
            var ajaxDisplay = document.getElementById('votesDiv');      
            if(ajaxDisplay.innerHTML && vt == document.getElementById('vt').value && pid == document.getElementById('pid').value && tbl == document.getElementById('tbl').value && ajaxDisplay.style.display !='none') {
                displayajax(ajaxDisplay,vt,x,y,tbl,pid,displayColor,show,'none');
            }
            else {      
                var ajaxRequest;  // The variable that makes Ajax possible!     
                try{
                    // Opera 8.0+, Firefox, Safari
                    ajaxRequest = new XMLHttpRequest();
                } catch (e){
                    // Internet Explorer Browsers
                    try{
                        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        try{
                            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e){
                            // Something went wrong
                            return false;
                        }
                    }
                }
                // Create a function that will receive data sent from the server
                ajaxRequest.onreadystatechange = function(){
                    if(ajaxRequest.readyState == 4){
                        ajaxDisplay.innerHTML = ajaxRequest.responseText;
                        displayajax(ajaxDisplay,vt,x,y,tbl,pid,displayColor,show,'');
                    }
                }
                ajaxRequest.open("GET",page,true);
                ajaxRequest.send(null);
            }   
            //
        }       
    }
}

function displayajax(ajaxDisplay,vt,x,y,tbl,pid,displayColor,show,display) {
    if(display == 'none') {
        closeVoteWin(vt,tbl,pid,show);
    }
    else {
        var positionTop = (document.documentElement.scrollTop + y - 216);
        if( positionTop < 3) {
            positionTop = 3;
        }
        ajaxDisplay.style.top = positionTop + "px";

        if(vt == 'hate') {
            ajaxDisplay.style.left = (x - 180) + "px";
        }
        else if(vt == 'love') {
            ajaxDisplay.style.left = (x - 130) + "px";
        }
        else if(vt == 'want') {
            ajaxDisplay.style.left = (x - 210) + "px";
        }
        ajaxDisplay.style.display = '';
        var votetype = new Array("hate","love","want");
        for(var i=0;i<votetype.length;i++) {
            if(votetype[i] == vt) {
                document.getElementById('txt-'+votetype[i]+'-'+tbl+'-'+pid).innerHTML = '<a onclick="javascript:votesajax(\'/votesajax.php?pid='+pid+'&tbl='+tbl+'&vt='+votetype[i]+'&show='+show+'\',GetMouseY(event),GetMouseX(event),'+pid+',\''+votetype[i]+'\','+tbl+',\''+show+'\');" href="javascript:return false;"><font color="'+displayColor+'">'+votetype[i].toUpperCase()+' IT</font></a>';
            }
            else {
                if(document.getElementById('txt-'+votetype[i]+'-'+tbl+'-'+pid)) {
                    document.getElementById('txt-'+votetype[i]+'-'+tbl+'-'+pid).innerHTML = '<a onclick="javascript:votesajax(\'/votesajax.php?pid='+pid+'&tbl='+tbl+'&vt='+votetype[i]+'&show='+show+'\',GetMouseY(event),GetMouseX(event),'+pid+',\''+votetype[i]+'\','+tbl+',\''+show+'\');" href="javascript:return false;">'+votetype[i].toUpperCase()+' IT</a>';
                }
            }
        }
    }
    
}
function GetMouseY(evt)  
{ 
    return evt.clientY;  
}

function GetMouseX(evt)  
{ 
    return evt.clientX;  
}


function ajaxFunctionPost(page){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
        }
    }
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}


function ajaxFunctionGetShow(page,usershowId) {
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.getElementById(usershowId).innerHTML = ajaxRequest.responseText;
        }
    }
    ajaxRequest.open("GET",page,true);
    ajaxRequest.send(null);
}

function ajaxFunctionCheckHandle(page,handle,handlename) {
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.getElementById(handlename).value = ajaxRequest.responseText;
        }
    }
    var handle = document.getElementById('handle').value;
    page = page + "&handleName=" + handle;
    ajaxRequest.open("GET",page,true);
    ajaxRequest.send(null);
}


function backData(url,pid,tbl,vt,show)
{
    if(document.getElementById('hate-'+tbl+'-'+pid)) {
		
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=hate&show='+show,
            success: function(data){
                   document.getElementById('hate-'+tbl+'-'+pid).innerHTML = data;
                } 
           });
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=hate&title=Y&show='+show,
            success: function(data){
                   document.getElementById('txt-hate-'+tbl+'-'+pid).innerHTML = data;
                } 
           });        
        
        /*var myAjax = new Ajax.Updater(
            {success: 'hate-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=hate&show='+show,
                onFailure: reportError
            }
        );*/
        /*var myAjax = new Ajax.Updater(
            {success: 'txt-hate-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=hate&title=Y&show='+show,
                onFailure: reportError
            }
        );*/
    }

    if(document.getElementById('love-'+tbl+'-'+pid)) {
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=love&show='+show,
            success: function(data){
                   document.getElementById('love-'+tbl+'-'+pid).innerHTML = data;
                } 
           });
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=love&title=Y&show='+show,
            success: function(data){
                   document.getElementById('txt-love-'+tbl+'-'+pid).innerHTML = data;
                } 
           });		
        /*var myAjax = new Ajax.Updater(
            {success: 'love-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=love&show='+show,
                onFailure: reportError
            }
        );
        var myAjax = new Ajax.Updater(
            {success: 'txt-love-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=love&title=Y&show='+show,
                onFailure: reportError
            }
        );*/
    }

    if(document.getElementById('want-'+tbl+'-'+pid)) {
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=want&show='+show,
            success: function(data){
                   document.getElementById('want-'+tbl+'-'+pid).innerHTML = data;
                } 
           });
        jQuery.ajax({
            type: "GET",
            url: url+'?pid='+pid+'&tbl='+tbl+'&vt=want&title=Y&show='+show,
            success: function(data){
                   document.getElementById('txt-want-'+tbl+'-'+pid).innerHTML = data;
                } 
           });		
        /*var myAjax = new Ajax.Updater(
            {success: 'want-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=want&show='+show,
                onFailure: reportError
            }
        );
        var myAjax = new Ajax.Updater(
            {success: 'txt-want-'+tbl+'-'+pid},
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&vt=want&title=Y&show='+show,
                onFailure: reportError
            }
        );*/
    }
    if(document.getElementById('usershow').innerHTML == 'N' ) {
        jQuery.ajax({
            type: "GET",
            url: url+'?usershow=N',
            success: function(data){
                   document.getElementById('usershow').innerHTML = data;
                } 
           });	
        /*var myAjax = new Ajax.Updater(
            {success: 'usershow'},
            url,
            {
                method: 'post',
                parameters: 'usershow=N',
                onFailure: reportError
            }
        );*/      
    }
}

function reportError(request)
{
    alert('Sorry. There was an error.');
}

function closeVoteWin(vt,tbl,pid,show) {
    document.getElementById("votesDiv").style.display = "none";
    backData('/votesajaxback.php',pid,tbl,vt,show);
}

function changeMessage(txtMessage,vt,obj) {
    if(obj.checked) {
        document.getElementById(txtMessage).readOnly = "true";
        document.getElementById(txtMessage).value = "You will not be prompted to give a reason for loving or hating or wanting anything. You can change this setting in the My Account section if you want to get this back";
    }
    else {
        document.getElementById(txtMessage).readOnly = "false";
        document.getElementById(txtMessage).value = "";
    }
}


function saveCoupon(file,couponId, id,id2){
       var ajaxRequest;  // The variable that makes Ajax possible!  
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById(id2);
                     var sMyVar = new String (ajaxRequest.responseText);
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
                     if(ajaxRequest.responseText.indexOf("SAVE")!=-1) {
                     document.getElementById('imageC'+couponId).innerHTML = '<img src="<?=PROTOCOL?>://beta.cashbaq.com/images/save.png" />';
                     document.getElementById(id).style.background = "url('') top left no-repeat;";
                     }
                     else{
                     document.getElementById('imageC'+couponId).innerHTML = '<img src="<?=PROTOCOL?>://beta.cashbaq.com/images/save1.png" />';
                     document.getElementById(id).style.background = "url('<?=PROTOCOL?>://beta.cashbaq.com/images/greenMarker.png') top left no-repeat;";
                     }                                                     
        }
    }   
    ajaxRequest.open("GET", file+'?couponId='+couponId, true);
    ajaxRequest.send(null);
       
}


function saveProduct(file,productId, id,id2){
       var ajaxRequest;  // The variable that makes Ajax possible!  
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById(id2);
                     var sMyVar = new String (ajaxRequest.responseText);
            ajaxDisplay.innerHTML = ajaxRequest.responseText;
                     if(ajaxRequest.responseText.indexOf("SAVE")!=-1) {
                     document.getElementById('imagePC'+productId).innerHTML = '<img src="<?=PROTOCOL?>://beta.cashbaq.com/images/save.png" />';
                     document.getElementById(id).style.background = "url('') top left no-repeat;";
                     }
                     else{
                     document.getElementById('imagePC'+productId).innerHTML = '<img src="<?=PROTOCOL?>://beta.cashbaq.com/images/save1.png" />';
                     document.getElementById(id).style.background = "url('<?=PROTOCOL?>://beta.cashbaq.com/images/greenMarker.png') top left no-repeat;";
                     }                                                     
        }
    }   
    ajaxRequest.open("GET", file+'?productId='+productId, true);
    ajaxRequest.send(null);
       
}

function ajaxPostTags(page,txtTagStore,userId){

    if(!userId) {
        MOOdalBox.open( // case matters
                 page+'&URL='+escape(page+'&go=1'), // the link URL
                 "Some kind of caption", // the caption (link's title) - can be blank
                 "500 400" // width and height of the box - can be left blank
              );
        return false;
    }

    if(!document.getElementById(txtTagStore).value) {
        alert("Please input your tag information.");
        return false;
    }
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            //alert(ajaxRequest.responseText);
            //backTag('/ajaxtagback.php',pid,tbl,merchantName);
        }
    }

    page = page + '&tag=' + document.getElementById(txtTagStore).value;
    ajaxRequest.open("GET",page,true);
    ajaxRequest.send(null); 
}

function backTag(url,pid,tbl,merchantName,id)
{
    if(document.getElementById(id)) {
        var myAjax = new Ajax.Updater(
            {success: id },
            url,
            {
                method: 'post',
                parameters: 'pid='+pid+'&tbl='+tbl+'&merchantName='+merchantName,
                onFailure: reportError
            }
        );      
    }
}

function EffectCombo(element) {
    if(jQuery('#'+element).css('display')!='none'){
        jQuery('#'+element).slideUp();
    }else{
        jQuery('#'+element).slideDown();
    }
    /*
    if(document.getElementById(element).style.display == 'none' ) {
        document.getElementById(element).style.display='block';
    } else {
        document.getElementById(element).style.display='none';
    }
    */
}

function EffectCombox(element) {
    if(jQuery('#'+element).css('display')!='none'){
        jQuery('#'+element).slideUp();
    }else{
        jQuery('#'+element).slideDown();
    }
}

function DisplayFormValues(){
    var str = '';
    var elem = document.getElementById('signupFrm').elements;
    for(var i = 0; i < elem.length; i++){
        if(elem[i].type == 'hidden' && elem[i].name == 'counterb'){
            str += "counterb=" + elem[i].value + "&";
        }
        if(elem[i].type == 'text'){
            if(i==0||i%2==0){
                if(i==0){
                    str += "txtName=" + escape(elem[i].value) + "&";
                }else{
                    if(i==1){
                        str += "txtEmail=" + escape(elem[i].value) + "&";
                    }else{
                        str += "friendName%5B%5D=" + escape(elem[i].value) + "&";
                    }
                }
            }else{
                if(i==0){
                    str += "txtName=" + escape(elem[i].value) + "&";
                }else{
                    if(i==1){
                        str += "txtEmail=" + escape(elem[i].value) + "&";
                    }else{
                        str += "friendEmail%5B%5D=" + escape(elem[i].value) + "&";
                    }
                }
            }
        }
    }
    return str;
}


function validatePhoneNumber(strPhoneNumber) {
	    return /^\(\d{3}\)\-\d{3}\-\d{4}$/.test(trimAll(strPhoneNumber))
	}

function validateEmail(strValue)
{
    var tmpValue;
    tmpValue = trimAll(strValue);
    /************************************************
    DESCRIPTION: Validates that a string contains a valid email pattern.      
    PARAMETERS:
       strValue - String to be tested for validity     
    RETURNS:
       True if valid, otherwise false.     
    REMARKS: Accounts for email with country appended
      does not validate that email contains valid URL
      type (.com, .gov, etc.) and optionally,
      a valid country suffix.  Since email has many
      forms this expression only tests for near valid
      address.  Some additional validation may be
      required.
    *************************************************/

    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(tmpValue))
    {
        return true;
    }
    return false;
}

function validateUrl(strValue)
{
    var v = new RegExp();
    v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
    if (!v.test(strValue)) {
        return false;
    }
    return true;
}

function validateXSS(value) {
    var patt1 = /script>/i;
    //var patt2 = /(\%27)|(\')|(\-\-)|(\%23)|(#)/i;
    var patt3 = /((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(;))/i;
    var patt4 = /\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/i;
    var patt5 = /((\%27)|(\'))union/i;
    var patt6 = /((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i;
    var patt7 = /((\%3C)|<)((\%69)|i|(\%49))((\%6D)|m|(\%4D))((\%67)|g|(\%47))[^\n]+((\%3E)|>)/i;
    
    if (value.match(patt1) || value.match(patt3) || value.match(patt4)
            || value.match(patt5) || value.match(patt6) || value.match(patt7)) {
        return false;
    } else {                                             
        return true;
    }
}

function validateUName( value ) {
	var v = new RegExp();
    v.compile("^[a-zA-Z_0-9]+$");
    if (!v.test(value)) {
        return false;
    }
	
	var result = value.search('-');
	if( result == -1 )
		return true;
	else
		return false;
}

function validateUNameLen( value, minLen ) {
	if( value.length < minLen ) 
		return false;
	else
		return true;
}

function trimAll( strValue ) {
/************************************************
DESCRIPTION: Removes leading and trailing spaces.
PARAMETERS: Source string from which spaces will be removed;
RETURNS: Source string with whitespaces removed.
*************************************************/
    var objRegExp = /^(\s*)$/;
    //check for all spaces
    if(objRegExp.test(strValue)) {
        strValue = strValue.replace(objRegExp, '');
        if( strValue.length == 0) {
            return strValue;
        }
    }
    //check for leading & trailing spaces
    objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
    if(objRegExp.test(strValue)) {
        //remove leading and trailing whitespace characters
        strValue = strValue.replace(objRegExp, '$2');
    }
    return strValue;
}
function validateNotEmpty( strValue ) {
/************************************************
DESCRIPTION: Validates that a string is not all blank (whitespace) characters.    
PARAMETERS:
   strValue - String to be tested for validity   
RETURNS:
   True if valid, otherwise false.
*************************************************/
    var strTemp = strValue;
    strTemp = trimAll(strTemp);
    if(strTemp.length > 0){
        return true;
    }  
    return false;
}

 function gGetElementById(s) {
     var o = (document.getElementById ? document.getElementById(s) : document.all[s]);
     return o == null ? false : o;
}

function checkForPresenceInSelect2(optVal,text,selList) {
    for (i = 0; i < selList.length; i++) {
        if (selList.options[i].value == optVal) return true;
        if (selList.options[i].text == text) return true;
    }
    return false;
}

function one2two(element1, element2) {
    var memberList = gGetElementById(element1);
    var selectedList = gGetElementById(element2);
    var len = memberList.length;
    // Ignore any selections that are made to "------"
    
    for (var i = 0; i < len; ++i) {
        if (memberList.options[i].selected == true) {
            memberList.options[i].selected = false;
            if (memberList.options[i].text == "------") {
                continue;
            }
            if (memberList.options[i].text == "Not Available") {
                continue;
            }
            if (checkForPresenceInSelect2(memberList.options[i].value, memberList.options[i].text, selectedList) == false) {
                selectedList.options[selectedList.length] = new Option(memberList.options[i].text, memberList.options[i].value);
                selectedList.onchange="";
            }
        }
    }
}

// moving a multi-select from element2 to element1.
// Actually this assumes that the values being moved are
// already present in element1 and ends up deleting
// the selected values in element2.
function two2one(element1, element2) {
    var selectedList = gGetElementById(element2);
    for (i = selectedList.length -1; i >= 0; i--) {
        if (selectedList.options[i].selected == true) {
            selectedList.options[i] = null;
        }
    }
}

function getPref() {
    var merchantSel = gGetElementById("merchantSel");
    for (var j = 0; j < merchantSel.length; j++) {merchantSel.options[j].selected = true;}     
    var categorySel = gGetElementById("categorySel");
    for (var j = 0; j < categorySel.length; j++) {  categorySel.options[j].selected = true;  } 
}

function showEditheadicoPI(act) {
	switch (act) {
		case 1:			
			if (!jQuery('#accountImgContent')) {
				return;
			}
			jQuery('#accountInfoContent').hide();
			jQuery('#accountImgContent').show();
			jQuery('#accountImgContent').html('<div style="text-align:center;">Loading ... <img src="/images/loading5.gif" style="margin:0px auto;"></div>');
			jQuery.get('headicon.php',{},function(data){
				jQuery('#accountImgContent').html(data);
			});
			break;
			
		case 2:
			ajaxProfileBack('/ajaxprofileback.php?action=imgProfile','imgProfile');
			jQuery('#accountImgContent').html('');
			jQuery('#accountImgContent').hide();
			jQuery('#accountInfoContent').show();
			break;
	}
}

function editheadico(caption){
    var w=940,h=1020;
    if(!document.getElementById('maskLayer')){
        var maskLayer=document.createElement('div');
        maskLayer.id='maskLayer';
        maskLayer.style.position='absolute';
        maskLayer.style.zIndex='20000';
        maskLayer.style.width = document.body.scrollWidth + "px";   
        maskLayer.style.height = document.body.scrollHeight + "px";
        maskLayer.style.top = "0px";   
        maskLayer.style.left = "0px";
        maskLayer.style.background = "#000";   
        maskLayer.style.filter = "alpha(opacity=40)";   
        maskLayer.style.opacity = "0.40";  
        maskLayer.onclick=hidewindow; 
        document.body.appendChild(maskLayer); 
    }else{
        var maskLayer=document.getElementById('maskLayer');
    }
    
    if(!document.getElementById('windowLayer')){
        var win=document.createElement('div');
        win.id='windowLayer';
        win.style.position='absolute';
        win.style.zIndex='30000';
        win.style.background='#FFF';
        win.style.margin = "72px 0px 0px 0px";
        var t=document.createElement('div');
        t.id='Editwindowtitle';
        t.setAttribute('style','text-align:left;height:18px;border:1px solid #CCC;padding:4px 6px 4px 10px;margin:0px 0px 0px 0px;background-color:#ECECEC;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;');
        t.innerHTML='<span style="float:left;margin:0px;">'+caption+'</span><span style="float:right;"><a href="javascript:hidewindow();">Close</a></span>';
        win.appendChild(t);
        
        document.body.appendChild(win); 
        var frame=document.createElement('iframe');
        frame.setAttribute('width',w);
        frame.setAttribute('height',h);
        frame.setAttribute('frameborder','0');
        frame.setAttribute('style','text-align:left;margin:0px 0px 0px 0px;');
        frame.id='headframe';
        win.appendChild(frame);
    }else{
        var win=document.getElementById('windowLayer');
        var frame=document.getElementById('headframe');
    }
    
    if(w){
        win.style.width=w+'px';
    }
    if(h){
        win.style.height=h+'px';
    }
    var left=(document.body.scrollWidth-parseInt(win.style.width))/2;
    var st=window.pageYOffset?window.pageYOffset:(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);
    var top =st+(window.screen.availHeight-parseInt(win.style.height))/2;
    win.style.left=(left>0?left:0)+'px';
    win.style.top=(top>0?top:0)+'px';
    win.style.display='block';
    frame.setAttribute('src','/headicon.php');
    
    maskstatus(maskLayer,true);
}
    
function hidewindow(){
    maskstatus(document.getElementById('maskLayer'),false);
    document.getElementById('windowLayer').style.display='none';
    ajaxProfileBack('/ajaxprofileback.php?action=imgProfile','imgProfile');
}

function maskstatus(maskLayer,status){
    if(status){
        maskLayer.style.display='block';
    }else{
        maskLayer.style.display='none';
    }
}
    
function ajaxProfileBack(page,id){
    var ajaxRequest;// The variable that makes Ajax possible!   
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            if(ajaxRequest.responseText) {
                if(document.getElementById(id).src) {
                    document.getElementById(id).src= "<?=SERVER?>"+ajaxRequest.responseText;
                }
                else {
                    document.getElementById(id).innerHTML=ajaxRequest.responseText;
                }
            }
        }
    }
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}

function ajaxreviewpost(page,displayid,reviewid) {
    var msg ='';
    var overall = '';
    for(var i=0;i<document.getElementsByName('overall').length;i++) {
        if(document.getElementsByName('overall')[i].checked) {
            overall = document.getElementsByName('overall')[i].value;
        }
    }
    var pricing = '';
    for(var i=0;i<document.getElementsByName('pricing').length;i++) {
        if(document.getElementsByName('pricing')[i].checked) {
            pricing = document.getElementsByName('pricing')[i].value;
        }
    }

    var shipping = '';
    for(var i=0;i<document.getElementsByName('shipping').length;i++) {
        if(document.getElementsByName('shipping')[i].checked) {
            shipping = document.getElementsByName('shipping')[i].value;
        }
    }

    var availability = '';
    for(var i=0;i<document.getElementsByName('availability').length;i++) {
        if(document.getElementsByName('availability')[i].checked) {
            availability = document.getElementsByName('availability')[i].value;
        }
    }

    var custsupport = '';
    for(var i=0;i<document.getElementsByName('custsupport').length;i++) {
        if(document.getElementsByName('custsupport')[i].checked) {
            custsupport = document.getElementsByName('custsupport')[i].value;
        }
    }

    var lovehate = '';
    for(var i=0;i<document.getElementsByName('lovehate').length;i++) {
        if(document.getElementsByName('lovehate')[i].checked) {
            lovehate = document.getElementsByName('lovehate')[i].value;
        }
    }

    /*
    if (!validateNotEmpty(document.getElementById('txtName').value))
    {
        msg = msg + "\nPlease enter name";
    }
    if (!validateNotEmpty(document.getElementById('txtCity').value))
    {
        msg = msg + "\nPlease enter city";
    }
    if (!validateNotEmpty(document.getElementById('cboState').value))
    {
        msg = msg + "\nPlease select state";
    }
    */

    if (!validateNotEmpty(document.getElementById('txtSubject').value))
    {
        msg = msg + "\nPlease enter subject";
    }
    if (!validateNotEmpty(document.getElementById('txtReview').value))
    {
        msg = msg + "\nPlease enter your review";
    }
    if (msg != "")
    {
        alert(msg);
        return false;
    }
    var ajaxRequest;  // The variable that makes Ajax possible! 
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                if(ajaxRequest.responseText) {
                    if(ajaxRequest.responseText == 'Edit') {                        
                        document.getElementById('userReview-'+reviewid).innerHTML=document.getElementById('txtReview').value;
                        document.getElementById('review-subject-'+reviewid).innerHTML=document.getElementById('txtSubject').value;
                        /*
                        document.getElementById('review-name-'+reviewid).innerHTML=document.getElementById('txtName').value;
                        document.getElementById('review-city-'+reviewid).innerHTML=document.getElementById('txtCity').value;
                        document.getElementById('review-state-'+reviewid).innerHTML=document.getElementById('cboState').value;
                        */
                    }
                    MOOdalBox.close(true);
                    //document.getElementById(displayid).style.display='none';
                }
            }
        }
        //page = page+"&name="+document.getElementById('txtName').value+"&city="+document.getElementById('txtCity').value+"&state="+document.getElementById('cboState').value+"&subject="+document.getElementById('txtSubject').value+"&review="+document.getElementById('txtReview').value;
        page = page+"&rating="+overall+"&pricing="+pricing+"&shipping="+shipping+"&productAvailability="+availability+"&customerSupport="+custsupport+"&lovehate="+lovehate+"&subject="+document.getElementById('txtSubject').value+"&review="+document.getElementById('txtReview').value+"&tableId="+document.getElementById('tableId').value;
        ajaxRequest.open("GET",page,true);
        ajaxRequest.send(null);
}

function ajaxFunctionCheckHandle(page,handle,handlename,y,x) {  
    document.getElementById('handleStatus').innerHTML = "";
    var handleName = document.getElementById(handle).value;
    changeButtonStyle('checkButton','buttonDisable','Checking username availability ...',1);    
    page = page + "&handleName=" + handleName;
    jQuery.get(page,{},function(data){    	    	
        //var ajaxDisplay = document.getElementById(handlename);
        //var positionTop = (document.documentElement.scrollTop + y - 540);
        //if( positionTop < 3) {
            //positionTop = 3;
        //}
        //ajaxDisplay.style.top = positionTop + "px";
        //150 - height of popup window
        //ajaxDisplay.style.marginTop = "-" + 160 + "px";
        //if (handleName) {
        	//ajaxDisplay.style.left = (x - 200) + "px";
        //} else {
        	//ajaxDisplay.style.left = x + "px";
        //}
        //ajaxDisplay.style.marginLeft = "100px";
        //ajaxDisplay.style.display = 'block';
        jQuery('#'+handlename).css("margin","-160px 0px 0px 100px");
        jQuery('#'+handlename).show();
        jQuery('#'+handlename).html(data);
    });        
}

function ajaxHandlePost(page){
    var ajaxRequest;  // The variable that makes Ajax possible! 
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
        }
    }
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}

function ajaxHandleBack(handleName){
    document.getElementById('handleDiv').style.display = 'none';
    document.getElementById('handleStatus').innerHTML='Name is saved';
    document.getElementById('handlePrevName').value = document.getElementById('handle').value; 
    changeButtonStyle('checkButton','button','Submit',0);
}


function ajaxFunctionAddMore(page,interimFrm,id) {
    var ajaxRequest; // The variable that makes Ajax possible!  
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("!");
                return false;
            }
        }
    }
    
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var ajaxDisplay = document.getElementById(id);
            //ajaxDisplay.insertAdjacentHTML('beforeEnd',ajaxRequest.responseText);
            alert(ajaxDisplay.innerHTML);
            ajaxDisplay.innerHTML = ajaxDisplay.innerHTML + ajaxRequest.responseText;
            alert(ajaxDisplay.innerHTML);
            if(ajaxDisplay.style.display == 'none') {
               ajaxDisplay.style.display = '';
            }
        }
    }
    var elem = document.getElementById(interimFrm).elements;
    for(var i=0;i<elem.length;i++) {
        if(elem[i].type == 'text' && elem[i].name == 'txtName'){
            var txtName = elem[i].value;
        }
        else if(elem[i].type == 'text' && elem[i].name == 'txtEmail'){
            var txtEmail = elem[i].value;
        }
        else if(elem[i].type == 'text' && elem[i].name == 'friendName[]'){
            var friendname = elem[i].value;
        }
        else if(elem[i].type == 'text' && elem[i].name == 'friendEmail[]'){
            var friendemail = elem[i].value;
        }
    }
    page = page + '?txtName=' + txtName + '&txtEmail=' + txtEmail + '&friendname=' + friendname + '&friendemail=' + friendemail;
    ajaxRequest.open("GET", page, true);
    ajaxRequest.send(null); 
}

function ajaxsendemail(page,interimFrm){
    var str = '';
    var msg = '';
    var msgObj = null;
    var elem = document.getElementById(interimFrm).elements;
    for(var i=0;i<elem.length;i++) {
        if(elem[i].type == 'text' && elem[i].name == 'txtName' && !validateNotEmpty(elem[i].value)){
            msg = msg + "\n Enter your name";
        }
        
        if(elem[i].type == 'text' && elem[i].name == 'txtEmail' && !validateEmail(elem[i].value)){
            msg = msg + "\n Enter your valid email";
        }

        if(elem[i].type == 'text' && elem[i].name == 'friendEmail[]' && !validateEmail(elem[i].value)){
            msg = msg + "\n '" + elem[i].value + "' is not a valid email";
        }
    }
    if(msg) {
        alert(msg);
    }
    else {
		changeButtonStyle('sendButton','buttonDisable','Sending ...',1);
        for(var i=0;i<elem.length;i++) {
            if(elem[i].type == 'hidden' && elem[i].name == 'counterb'){
                str += "counterb=" + elem[i].value + "&";
            }
            else if(elem[i].type == 'text' && elem[i].name == 'txtName'){
                str += "txtName=" + escape(elem[i].value) + "&";
            }
            else if(elem[i].type == 'text' && elem[i].name == 'txtEmail'){
                str += "txtEmail=" + escape(elem[i].value) + "&";
            }
            else if(elem[i].type == 'text' && elem[i].name == 'friendName[]'){
                str += "friendName%5B%5D=" + escape(elem[i].value) + "&";
            }
            else if(elem[i].type == 'text' && elem[i].name == 'friendEmail[]'){
                str += "friendEmail%5B%5D=" + escape(elem[i].value) + "&";
            }
            else if(elem[i].type == 'textarea' && elem[i].name == 'message'){
                str += "message=" + escape(elem[i].value) + "&";
                msgObj = elem[i];
            }
            else if(elem[i].type == 'hidden' || elem[i].type == 'text'){
                str += elem[i].name + "=" + escape(elem[i].value) + "&";
            }
        }
        var ajaxRequest; // The variable that makes Ajax possible!  
        try{
            // Opera 8.0+, Firefox, Safari
            ajaxRequest = new XMLHttpRequest();
        } catch (e){
            // Internet Explorer Browsers
            try{
                ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try{
                    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e){
                    // Something went wrong
                    alert("!");
                    changeButtonStyle('sendButton','button','Send');
                    return false;
                }
            }
        }
        // Create a function that will receive data sent from the server
        ajaxRequest.onreadystatechange = function(){
            if(ajaxRequest.readyState == 4){
                var content = ajaxRequest.responseText;
                eval("var str="+content)
                if(str.flag == true) {
                    var message = 'You have sent e-mail to friends of';
                    for(i=0;i<str.friend.length;i++) {
                        message += ' {' + str.friend[i].friendName + ':' + str.friend[i].friendEmail + '}'; 
                    }
                    var parentNode = msgObj.parentNode || msgObj.parent;
                    if (parentNode.innerHTML) {
						parentNode.innerHTML = '<div style="margin:15px;font-weight:bold;font-size:14px;">'+message+'</div>';
						//setTimeout('MOOdalBox.close();',2000);
						setTimeout("document.getElementById('sendEmailToFriends').innerHTML='';",2000);
                    } else {
						alert(message);                    
						//MOOdalBox.close();
						document.getElementById('sendEmailToFriends').innerHTML='';
                    }
                    changeButtonStyle('sendButton','buttonDisable','Closing ...');
                }
                else {
                    alert(str.friend);
                    changeButtonStyle('sendButton','button','Send');
                }
            }
        }
        page = page + '?' + str;
        ajaxRequest.open("GET", page, true);
        ajaxRequest.send(null); 
    }
}
