﻿var VirtuozAgent = Class.create({
	
	default800: "1-888-364-8598",
    version: "1.0.1",
    debug:  false,
	orderObj:new Object(),
    ws_url:                     "/chegg-chegg_contactus-englishus-WebBotRouter/botservice.asmx/TalkXml",
    
    contact_us_id:              "virtuoz_contact",
    dialog_form_id:             "virtuoz_dialog",
    dialog_anwser_container:    "virtuoz_answer",
    dialog_populars_id:         "virtuoz_popular_issues",
    error_id:                   "virtuoz_error",
	loading:					'virtuoz_loading',
    previous_id:                "virtuoz_previous",
    related_topics_id:          "virtuoz_related_topics",
    thumb_down_mesage_id:       "virtuoz_thumbdown_message",
    thumbs_id:                  "virtuoz_thumbs",
    thumb_up_message_id:         "virtuoz_thumbup_message",

    relatedTopicsKey:           "rew",
    contactChannelsKey:         "contact",

    history: [],
    last: null,
    relatedTopics: [],
    contactChannels: [],
	isAvailable: true,
	realTime: -1,
	dayOfWeek: -1,

    histCount: {
        'cid':'',
        'value':0
    },

    interlocutorID: '',
    contextID: '',

    codes:{
        back:       "##Back",
        thumbup:   "##SkipAlyze#thumbs#up",
        thumbdown:  "##SkipAlyze#thumbs#down",
        //email:      "##SkipAlyze#channels#mail",
        phone:      "##SkipAlyze#channels#phone",
        _lpChatBtn: "##SkipAlyze#channels#chat"
    },

    maxlength: 110,
    caractersleft_id: "virtuoz_caractersleft",
    virtuoz_chegg_800: "virtuoz_chegg_800",
	forgotPasswordURL: "http://www.chegg.com/login/",

    //*****************************************************************
    // GMT to PST offset
    //*****************************************************************
	/* This was modified to be the difference between PST and GMT */
    timezoneOffset: -8,
    
    hoursOfOperations: [
						{'from': 7,'to' : 16}, //Sunday
						{'from': 5,'to' : 21}, //Monday
						{'from': 5,'to' : 21}, //Tuesday
						{'from': 5,'to' : 21}, //Wednesday
						{'from': 5,'to' : 21}, //Thursday
						{'from': 5,'to' : 21}, //Friday
						{'from': 7,'to' : 16}  //Saturday
	],
    liveOnclick: null,
    /**
     *Init function
     */
    initialize: function(){
        /*
		* Set the time for interface elements depend on it
		*/
		this.setMyTime();
	    this.liveOnclick = $('_lpChatBtn').onclick;

        this.log("Agent init...");
        this.dialogForm = $(this.dialog_form_id);
        var me = this;

        //this.log("Init form submit event...");
        this.dialogForm.observe('submit', function(event){
			if($(me.dialog_form_id)["question"].value.length>0){
				event.stop();
				me.talk($F($(me.dialog_form_id)["question"]));
				$(me.dialog_form_id)["question"].value="";
			}else{
				event.stop();
				me.myAlert("Please enter a question or problem.");
			}
        });

        //this.log("Init previous click event...");
        $(this.previous_id).observe('click', function(event){
            me.getPrevious();
            event.stop();
            return false;
        });

        this.log("Init key count...");
        //count caracters left
        $($(this.dialog_form_id)["question"]).observe('keypress', function(evt){ // IE...
            var length = me.maxlength - $F($(me.dialog_form_id)["question"]).length;
            if(length < 1 && evt.keyCode < 1)
                evt.stop();
        });
        $($(this.dialog_form_id)["question"]).observe('keyup', function(evt){ // IE...
            var length = me.maxlength - $F($(me.dialog_form_id)["question"]).length;
            $(me.caractersleft_id).update(length);
        });
        
       
        this.log("Init populars events...");
        // Handle clicks on populars topics
        $$('#' + this.dialog_populars_id + " a").each(function(a){
            a.observe('click', function(evt){
                var txt = this.firstChild.data;
                me.log(txt);
				$(me.dialog_form_id)["question"].value="";
				var length = me.maxlength;
                $(me.caractersleft_id).update(length);

                me.talk(txt);
                evt.stop();
            })
        });

        /**
         * hide phone outside of hours of operations
         */
		
        $$(".popup .close").each(function(el){
            el.observe('click', function(evt){
                el.up().setStyle({
                    display:'none'
                });
                evt.stop();
            })
        })

        $$(".popupBig .close").each(function(el){
            el.observe('click', function(evt){
                el.up().setStyle({
                    display:'none'
                });
                evt.stop();
            })
        })
		$(this.virtuoz_chegg_800).update(this.default800);

        this.resizeParentIframe();
    },

    resetHandlers: function(){
       	var evtHandler = this.showNoClickPopup;
        var contactus = $(this.contact_us_id);
        contactus.childElements().each(function(e){
            e.onclick = null;
			e.observe('click',evtHandler);
        });
    	if(this.checkTime()==true){
            $('phone').setStyle({ 
                'display':'block'
            });
            $('_lpChatBtn').setStyle({ 
                'display':'block'
            });
		}else{
		    $('phone').setStyle({ 
                'display':'block'
            });
            $('_lpChatBtn').setStyle({ 
                'display':'block'
            });
		}
    },

    checkTime: function(){
        if( (this.realTime < this.hoursOfOperations[this.dayOfWeek].from) || (this.realTime >= this.hoursOfOperations[this.dayOfWeek].to)){
    		this.isAvailable=false;
        }else{
    		this.isAvailable=true;
		}
		return this.isAvailable;
	},

    setMyTime: function(){
        this.log("Init contacts events...");
        var d = new Date();
        d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);
        d.setTime(d.getTime() +  (this.timezoneOffset * 60 * 60 * 1000));
		this.realTime = d.getHours();
		this.dayOfWeek = d.getDay();
		this.resetHandlers();
    },
	
    resizeParentIframe: function(){
		try{
			var doc = $(document.body);
			var iframe = $(parent.document.getElementById('virtuoz_iframe'));
			if(!iframe){
				this.log("Parent Iframe NOT FOUND, check iframe id (should be 'virtuoz_iframe')");
				return;
			}
			var dims = $("virtuoz_contactus_container").getDimensions();
			if(Prototype.Browser.IE){
				dims.height += 4;
				dims.width += 4;
			}
			iframe.style.height = dims.height + "px";
			iframe.style.width = dims.width +  "px";
		}catch(oops){
		}
    },

    observeThumbs: function(){
        var me = this;
        this.log("Init thumbs events...");
        var thumbs = $$("#" + this.thumbs_id + " a");
        thumbs.each(function(a){
            a.setStyle({
                opacity:'1'
            });
            $(me.thumb_down_mesage_id).setStyle({
                display: 'none'
            });
            $(me.thumb_up_message_id).setStyle({
                display: 'none'
            });
            
            a.observe("click", function(evt){
                var id = a.readAttribute('href');
                me.talk(me.codes[id], {
                    ignoreAnswer:true,
                    initDial: false
                });

                thumbs.each(function(t){
                    if(!(id == t.readAttribute('href'))){
                        t.setStyle({
                            opacity:'0.5'
                        });
                    }
                    t.stopObserving('click');
                    t.observe("click", function(evt){
                        evt.stop()
                    });
                });

                if(this.readAttribute('href') == 'thumbdown')
                    $(me.thumb_down_mesage_id).setStyle({
                        display: 'block'
                    });

                if(this.readAttribute('href') == 'thumbup')
                    $(me.thumb_up_message_id).setStyle({
                        display: 'block'
                    });
                
                evt.stop();
            });
        });
	},
    doAjax: function(params, sendMethod, options, txt){
        var me = this;
        if(!options){
            options = {
                ignoreAnswer:false,
                initDial: true
            }
        }
		if(!txt){
			txt="";
		}
        new Ajax.Request(this.ws_url, {
            method: sendMethod,
            parameters: params,
            onSuccess: function(transport) {
				document.getElementById("virtuoz_loading").style.visibility="hidden";
				document.getElementById("virtuoz_loading").style.display="none";
				var ansT = transport.responseText;
				try{
					var ans=me.parseMyXML(ansT);
					var el = ans.getElementsByTagName('Responses')[0];
					me.interlocutorID = el.getAttribute('InterlocutorId');
					me.contextID = el.getAttribute('ContextId');
					me.log("interlocutorID= " + me.interlocutorID);
					me.log("contextID= " + me.contextID);
					var outText="";
					if(el.getElementsByTagName('OutGui')[0].firstChild != null){
						var outGui=el.getElementsByTagName('OutGui')[0].firstChild.data;
						if(outGui.length>0){
							switch(outGui){
								case "Display_Return_NoBook":
									outText = "You do not have any current book orders.";
									break;
								case "Display_LoginForm":
									outText = me.formatAns(el.getElementsByTagName('OutText')[0].firstChild.data) + me.buildLogin();
									break;
								case "Display_Tracking":
									me.parseOrders(el.getElementsByTagName('OutText')[0], true);
									outText = me.displayTracking();
									break;
								case "Display_Return":
									me.parseOrders(el.getElementsByTagName('OutText')[0]);
									outText = me.displayReturns();
									break;
								case "Display_Return_NoBook":
									outText = "You do not have any current book orders.";
									break;
								case "Display_ReasonForm":
									outText =  me.buildReason(me.formatAns(el.getElementsByTagName('OutText')[0].firstChild.data));
									break;
								case "Display_FormEmail":
									outText =  me.formatAns(el.getElementsByTagName('OutText')[0].firstChild.data) + me.newEmail();
									break;
								case "Login_Error":
									var msg="Your login was not recognized. Press cancel to reenter login information, or "+
									"OK to be directed to the Chegg login page to reset your password.";
									if(confirm(msg)){
										location.href=me.forgotPasswordURL;
										return;
									}else{
										return;
									}
									break;
								case "Thumb_Action":
									break;
								case "Channel_Action":
									break;
								default:
									outText = me.formatAns(el.getElementsByTagName('OutText')[0].firstChild.data);
									break;
							}
						}
					}else{
						outText = me.formatAns(el.getElementsByTagName('OutText')[0].firstChild.data);
					}
					var test="$number=";
					if(el.getElementsByTagName('OutUrl')[0].firstChild){
						if(el.getElementsByTagName('OutUrl')[0].firstChild.data.indexOf(test)!=-1){
							var str=el.getElementsByTagName('OutUrl')[0].firstChild.data;
							var _800=str.substring(str.indexOf(test)+test.length,str.length);
							$(me.virtuoz_chegg_800).update(_800);
						}
					}
					if(outText.length>0){
						$(me.dialog_anwser_container).update(outText);
						me.setActionLinks();
						
						try{
							me.parseRelatedTopics(el);
							me.parseContactChannels(el);
							me.displayRelatedTopics();
							me.displayContactChannels();
						}
						catch(e){
							me.log(e);
						}
						
						var last = {
							'question': txt,
							'ans': ans,
							'cid': me.contextID
						};
						me.myAlert("presave");
						me.saveAns(last);
					}
				}
				catch(oops){}
                me.resizeParentIframe();
            },
            onFailure: function(transport){
				document.getElementById("virtuoz_loading").style.visibility="hidden";
				document.getElementById("virtuoz_loading").style.display="none";
                me.log('Error: ' + transport.status + ' - ' + transport.statusText);
                $(me.error_id).setStyle({
                    display:  "block"
                });
                $(me.dialog_anwser_container).hide();
                me.resizeParentIframe();
            }
        });
        this.observeThumbs();
    },
	
    /**
     * Send question to agent via Ajax request
     * options:
     *  - ignoreAnswer:boolean
     *  - initDial:boolean
     *
     */
    talk: function(text, options){
        if(!options){
            options = {
                ignoreAnswer:false,
                initDial: true
            }
        }
		$$(".ans_container").each(function(e){
			e.setStyle({
				display:'block'
			});
		})

        $(this.error_id).setStyle({
            display:'none'
        });
         
        this.log("Sending text: " + text);
        
		var params = {
			'InText':text,
			'ContextId':options.initDial?"":this.contextID,
			'InterlocutorId':this.interlocutorID,
			'InUrl':''
		};
        this.log(params);
        this.doAjax(params, 'post', options, text);
    },

    /**
     * Add les agent's answer to the history
     */
    saveAns: function(last){
        if(!(last.question == this.codes.back)){
            if(this.histCount.cid.empty() || this.histCount.cid == last.cid){
                this.histCount.value++;
            }
            else{
                this.histCount.value = 1;
            }
            this.histCount.cid = last.cid;
        }
        else{
            if(this.histCount.value > 0)
                this.histCount.value--;
        }
        this.log('HIST COUNT: ' + this.histCount.value);
        if(this.histCount.value > 1)
            $(this.previous_id).setStyle({
                display:'block'
            });
        else
            $(this.previous_id).setStyle({
                display:'none'
            });

        //==========================

        try{
            if(this.last)
                this.history.push(this.last);
            this.last = last;
            this.log("HISTORY");
            this.log(this.history);
        }
        catch(e){
            this.log(e);
        }
    },
    /**
     * Display the agent's answer
     */
	parseMyXML:function(_text) { 
		if (typeof DOMParser != "undefined") { 
			var xmlDoc = new DOMParser().parseFromString(_text,'application/xml');
			xmlDoc.normalize();
			return (xmlDoc); 
		}
		else if (typeof ActiveXObject != "undefined") { 
			var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.loadXML(_text);		
			return xmlDoc; 
		} 
		else { 
			// As a last resort, try loading the document from a data: URL 
			// This is supposed to work in Safari. Thanks to Manos Batsis and 
			// his Sarissa library (sarissa.sourceforge.net) for this technique. 
			var url = "data:text/xml;charset=utf-8," + encodeURIComponent(_text); 
			var request = new XMLHttpRequest(); 
				request.open("GET", url, false); 
			request.send(null); 
			return request.responseXML; 
		} 
	},
    parseOrders: function(answer, shipmentArg){
		var me=this;
		_xml=answer;
		var insider = _xml.childNodes[0].nodeValue;
		var inside = me.parseMyXML(insider);
		var orders = inside.getElementsByTagName("orders");
		me.orderObj=new Object();
		me.orderObj.orders=new Array();
		var strI="";
		var h=-1;
		try{
		for(h=0;h<orders.length;h++){
			me.orderObj.orders[h]=new Object();
			me.orderObj.orders[h].order=new Array();
			var order = orders[h].getElementsByTagName("order");
				me.myAlert("order.length=" +  order.length);
				for(var i=0;i<order.length;i++){
					strI+=order[i].getElementsByTagName("orderStatus")[0].firstChild.nodeValue;
					strI+=",\n";
					me.orderObj.orders[h].order[i]={
						orderKey:order[i].getElementsByTagName("orderKey")[0].firstChild.nodeValue,
						orderDate:order[i].getElementsByTagName("orderDate")[0].firstChild.nodeValue,
						orderStatus:order[i].getElementsByTagName("orderStatus")[0].firstChild.nodeValue
					};
					me.orderObj.orders[h].isValid=true;
					me.orderObj.orders[h].order[i].orderItems=new Array();
					var orderItem = order[i].getElementsByTagName("orderItem");
					me.myAlert(shipmentArg + ";order.length=" +  orderItem.length);
					if(shipmentArg){
						for(var j=0;j<orderItem.length;j++){
							me.orderObj.orders[h].order[i].orderItems[j]={
								lineID:orderItem[j].getElementsByTagName("lineID")[0].firstChild.nodeValue,
								price:orderItem[j].getElementsByTagName("price")[0].firstChild.nodeValue,
								title:orderItem[j].getElementsByTagName("title")[0].firstChild.nodeValue,
								ISBN:orderItem[j].getElementsByTagName("ISBN")[0].firstChild.nodeValue,
								dueDate:orderItem[j].getElementsByTagName("dueDate")[0].firstChild.nodeValue,
								status:orderItem[j].getElementsByTagName("status")[0].firstChild.nodeValue
							};
							me.orderObj.orders[h].order[i].orderItems[j].shipment=new Array();
							var shipment = orderItem[j].getElementsByTagName("shipment");
							if(shipment.length>0){
								try{
									for(var k=0;k<shipment.length;k++){
										me.orderObj.orders[h].order[i].orderItems[j].shipment[k]={
											shipmentDate:
												shipment[k].getElementsByTagName("shipmentDate")[0].firstChild == null ? "" :
												shipment[k].getElementsByTagName("shipmentDate")[0].firstChild.nodeValue,
											shippingCompany:
												shipment[k].getElementsByTagName("shippingCompany")[0].firstChild == null ? "" :
												shipment[k].getElementsByTagName("shippingCompany")[0].firstChild.nodeValue,
											trackingNumber:
												shipment[k].getElementsByTagName("trackingNumber")[0].firstChild == null ? "" :
												shipment[k].getElementsByTagName("trackingNumber")[0].firstChild.nodeValue,
											trackingUrl:
												shipment[k].getElementsByTagName("trackingUrl")[0].firstChild == null ? "" :
												shipment[k].getElementsByTagName("trackingUrl")[0].firstChild.nodeValue
										}
									}
								}catch(oops){
								}
							}
						}
					}else{
						for(var j=0;j<orderItem.length;j++){
							me.orderObj.orders[h].order[i].orderItems[j]={
								lineID:orderItem[j].getElementsByTagName("lineID")[0].firstChild.nodeValue,
								price:orderItem[j].getElementsByTagName("price")[0].firstChild.nodeValue,
								title:orderItem[j].getElementsByTagName("title")[0].firstChild.nodeValue,
								ISBN:orderItem[j].getElementsByTagName("ISBN")[0].firstChild.nodeValue,
								dueDate:orderItem[j].getElementsByTagName("dueDate")[0].firstChild.nodeValue,
								status:orderItem[j].getElementsByTagName("status")[0].firstChild.nodeValue
							};
						}
					}
					me.orderObj.orders[h].isValid=true;
				}
			}
		}catch(oops){
		}
		me.orderObj.validOrders=new Array();
		for(var h=0;h<me.orderObj.orders.length;h++){
			if(me.orderObj.orders[h].isValid==true){
				me.orderObj.validOrders.push(me.orderObj.orders[h]);
			}
		}
    },

    displayReturn: function(answer){
		return("You have current book orders.");
    },
    formatAns: function(answer){
        this.log('formating...');

        //replace lists with <ul> / <li>
        var isList = false;
        var ans = "";
        var lines = answer.split('\n');
        
        try{
            lines.each(function(line){
                if(line.startsWith("-") || line.startsWith('\u2022')){ // "-" or "•"
                    line = line.strip();
                    if(!isList){
                        ans += "<ul>\n";
                        isList = true;
                    }
                    ans += "\t<li>" + line + "</li>\n";
                }
                else{
                    if(isList){
                        ans += "</ul>\n";
                        isList = false;
                    }
                    ans += line + '<br />\n';
                }
            });
            if(isList)
                ans += "</ul>\n";
            
        }
        catch(e){
            this.log(e);
        }

        this.log("FORMATED ANS:");
        this.log(ans);
        return ans;
    },

    /**
     * Add javascript callbacks on links
     */
    setActionLinks: function(){
        var me = this;

        /* Add actions on links */
        this.log("setting link's actions...");
        try{
            var links = $$("#" + this.dialog_anwser_container + " a");
            this.log(links);

            links.each(function(link){
                //send code to dial
                if(link.readAttribute('code') != null){
                    
                    link.observe('click', function(evt){
                        me.talk(this.readAttribute('code'),{
                            initDial:false
                        });
                        evt.stop();
                        return false;
                    });
                }
                //send content to dial
                else if(!link.hasAttribute('href')){
                    link.observe('click', function(evt){
                        $(me.dialog_form_id).question.value = this.firstChild.data;
                        me.talk(this.firstChild.data, {
                            initDial:false
                        });
                        evt.stop();
                        return false;
                    });
                }
                else{
                    link.target = "_parent";
                }
            })
 
        }
        catch(e){
            this.log(e);
        }
    },

    displayRelatedTopics: function(){
        var me = this;
        this.log("Displaying related topics...");
        
        var topics =  $(this.related_topics_id);
        
        if(this.relatedTopics.size() < 1){
            topics.previous().setStyle({
                display: 'none'
            });
            topics.hide();

            $(this.thumbs_id).setStyle({
                display:  "none"
            });
            $(this.dialog_populars_id).show();
            return;
        }

        this.log("TOPIC:" + topics);
        topics.update();

        //TODO: check order
        this.relatedTopics.each(function(topic){
            var pt = new Element('p');
            var ap = new Element('a', {
                href:"#"
            });

            ap.observe('click',function(){
                me.talk(topic);
                $(me.dialog_form_id).question.value = topic;

                var length = me.maxlength - topic.length;
                $(me.caractersleft_id).update(length);
            });

            pt.update('>');
            pt.insert(ap);
            ap.update(topic);
            topics.insert(pt);
        });

        topics.previous().setStyle({
            display: 'block'
        });
        
        topics.show();
        $(this.dialog_populars_id).hide();
        $(this.thumbs_id).setStyle({
            display:  "block"
        });
        this.relatedTopics.clear();
    },


    enableImg: function(){
        
	},


    disableImg: function(which){
        
	},


    displayContactChannels: function(){
        if(this.contactChannels.length < 1)
            return;

        this.log("Displaying contact channels...");
        this.log(this.contactChannels);

        var me = this;
        if(this.checkTime()){
			var contactus = $(this.contact_us_id);
			var i=0;
			contactus.childElements().each(function(e){
				var id = e.readAttribute('id');
				if(id == "_lpChatBtn")
					id = "chat";
				e.onclick = null;
				e.stopObserving('click');
				var src;
				if(me.contactChannels[i]==id){
//					src = "images/chegg_cu_" + id + ".png";
		//			me.enableImg(e.id);
					if(e.id=="phone"){
						src = "http://www.chegg.com/contactus/callwait/?image_on=1";
						e.observe('click',me.showContactPopup);
					}else{
						src = "http://www.chegg.com/contactus/chatwait/?image_on=1";
						e.observe('click',me.showChatPopup);
					}
				}else{
			//		me.disableImg(e.id);
					if(e.id=="phone"){
						src = "http://www.chegg.com/contactus/callwait/?image_on=0";
					}else{
						src = "http://www.chegg.com/contactus/chatwait/?image_on=0";
					}
//					src = "images/chegg_cu_" + id + "_off.png";
					e.observe('click',me.showNoClickPopup);
				}
				e.firstDescendant().writeAttribute('src', src);
				e.setStyle({display: 'block'});
				i++;
			});	
			var lastInsert = null;
			this.contactChannels.each(function(c){
				var id = c;
				if(c == "chat"){
					id = "_lpChatBtn";
					$(id).onclick =  me.liveOnclick;
				}
				if(c == "email")
					c = "mail";
				if(c != "mail"){ // désactivation de l'email
				
					var el = $(id);
				   
					el.remove();
	
					if(c=="phone"){
						src = "http://www.chegg.com/contactus/callwait/?image_on=1";
					}else{
						src = "http://www.chegg.com/contactus/chatwait/?image_on=1";
					}
					
//					var src = "images/chegg_cu_" + c + ".png";
				//	alert('src='+src);
					el.firstDescendant().writeAttribute('src', src);
	
					if(lastInsert == null)
						contactus.insert({ 
							top:  el
						});
					else
						lastInsert.insert({
							after:  el
						});
						
					lastInsert = el;
					el.stopObserving('click');
	
					//Handle clicks on contacts
					el.observe('click', function(evt){
						var id = el.readAttribute('id');
						me.talk(me.codes[id], {
							ignoreAnswer:true,
							initDial: false
						});
						//
						// evt.stop();
					});
	
					//Show tel popup
					if(c == "phone"){
						el.observe('click', function(evt){
							$('virtuoz_contactpop').setStyle({
								display:'block'
							});
							evt.stop();
						});
					}
				} 
			});
		}else{
			var contactus = $(this.contact_us_id);
			contactus.childElements().each(function(e){
				e.onclick = null;
				
				e.stopObserving('click');
				if(e.id=="phone"){
					e.observe('click',me.showAfterHoursContactPopup);
				}else{
					e.observe('click',me.showAfterHoursPopup);
				}
			});
		}
    },
    showNoClickPopup: function(evt){
		$('virtuoz_noclickpop').setStyle({
			display:'block'
		});
        evt.stop();
        return false;
    },
    showAfterHoursPopup: function(evt){
		$('virtuoz_afterhours_chatpop').setStyle({
			display:'block'
		});
        evt.stop();
        return false;
    },
	
    showAfterHoursContactPopup: function(evt){
		$('virtuoz_afterhours_contactpop').setStyle({
			display:'block'
		});
        evt.stop();
        return false;
    },
	
    
    showChatPopup: function(evt){
		try{
			if(evt.currentTarget.attributes){
				if(evt.currentTarget.attributes.id.value=="phone"){
					$('virtuoz_contactpop').setStyle({
						display:'block'
					});
				}else{
					$('virtuoz_chatpop').setStyle({
						display:'block'
					});
					return true;
				}
			}else{
				if(evt.target.parentElement.id=="phone"){
					$('virtuoz_contactpop').setStyle({
						display:'block'
					});
				}else{
					$('virtuoz_chatpop').setStyle({
						display:'block'
					});
					return true;
				}
			}
		}catch(oops){
			try{
				if(evt.target.parentElement.id=="phone"){
					$('virtuoz_contactpop').setStyle({
						display:'block'
					});
				}else{
					$('virtuoz_chatpop').setStyle({
						display:'block'
					});
					return true;
				}
			}catch(oops){
			}
		}
        evt.stop();
        return false;
    },
    
    showContactPopup: function(evt){
		$('virtuoz_contactpop').setStyle({
			display:'block'
		});
		if(this.checkTime()==false){
			$('virtuoz_afterhours_contactpop').setStyle({
				display:'block'
			});
			$('virtuoz_contactpop').setStyle({
				display:'none'
			});
		}
        evt.stop();
        return false;
    },
    
    returnFalse: function(evt){
		evt.stop();
        return false;
    },
    
    parseContactChannels: function(answer){
        try{
            var OutUrl = answer.getElementsByTagName('OutUrl')[0].firstChild.data;
        }
        catch(e){
            this.log("No OutUrl data");
            return;
        }
        
        if(OutUrl.strip().empty()) return;

        var lines = OutUrl.split('$');
        var me = this;

        this.contactChannels.clear();

        this.log("Contact: channels: ");

        lines.each(function(l){
            if(l.strip().empty()) return;
            var keyval = l.strip().split("=");
            try{
                var key = keyval[0].strip();
                var value = keyval[1].strip();
            }
            catch(e)
            {
                this.log('NO CONTACTS CHANNELS');
			me.myAlert('NO CONTACTS CHANNELS');
			     return;
            }

            me.log("{ '" + key + "' : '" + value + "'}");

            var index = key.replace(me.contactChannelsKey, "");
            me.contactChannels[parseInt(index) - 1] = value;
        });
    },

    parseRelatedTopics: function(answer){
        
        try{
            var outGui = answer.getElementsByTagName('OutGui')[0].firstChild.data;
        }
        catch(e){
            this.log("No OutGui data");
            return;
        }

        if(outGui.strip().empty()) return;
        
        var lines = outGui.split('$');
        var me = this;

        this.relatedTopics.clear();

        lines.each(function(l){
            if(l.strip().empty()) return;

            var keyval = l.strip().split("=");

            var key = keyval[0].strip();
            var value = keyval[1].strip();

            me.log("- { '" + key + "' : '" + value + "'}");

            var index = key.replace(me.relatedTopicsKey, "");
			if(value.length>0){
            	me.relatedTopics[parseInt(index) - 1] = value;
			}	
        });
    },

    getPrevious: function(){
        this.talk(this.codes.back, {
            initDial: false
        });
    },

    log: function(text){
        if(!this.debug)return;
        try{
            console.log(text);
        }catch(e){
        }
    },
	trackOrder:function(orderLineID){
		alert('Your order, ' + orderLineID + ' is not yet in the system.');
	},
	openWindow:function(_url){
		window.open(_url,"_blank");
	},
	displayTracking:function(){
		var str='';
		str+='<form name="theLineItems"><table border="0">';
		str+='<tr>';
		str+='<td class="tableHead"></td>';
		str+='<td class="trackingHead">ORDER</td>';
		str+='<td class="trackingHead">DATE</td>';
		str+='<td class="trackingHead">STATUS</td>';
		str+='<td class="trackingHead">ITEMS</td>';
		str+='</tr>';
		for(var v=0;v<this.orderObj.validOrders.length;v++){
			for(var vv=0;vv<this.orderObj.validOrders[v].order.length;vv++){
				for(var vvv=0;vvv<this.orderObj.validOrders[v].order[vv].orderItems.length;vvv++){
					str+='<tr>';
					if(this.orderObj.validOrders[v].order[vv].orderItems[vvv].shipment){
						if(this.orderObj.validOrders[v].order[vv].orderItems[vvv].shipment.length>0){
							try{
								if(this.orderObj.validOrders[v].order[vv].orderItems[vvv].shipment[0].trackingUrl.length>0){
									str+='<td><a href="#" onclick="va.openWindow(\'';
									str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].shipment[0].trackingUrl;
									str+='\');return false"><img src="images/track.png" width="100" height="36" /></a></td>';
								}else{
									str+='<td><a href="#" onclick="va.trackOrder(\'';
									str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].lineID
									str+='\');return false"><img src="images/track.png" width="100" height="36" /></a></td>';
								}
							}catch(oops){
								str+='<td><a href="#" onclick="va.trackOrder(\'';
								str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].lineID
								str+='\');return false"><img src="images/track.png" width="100" height="36" /></a></td>';
							}
						}else{
							str+='<td><a href="#" onclick="va.trackOrder(\'';
							str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].lineID
							str+='\');return false"><img src="images/track.png" width="100" height="36" /></a></td>';
						}
					}else{
						str+='<td><a href="#" onclick="va.trackOrder(\'';
						str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].lineID
						str+='\');return false"><img src="images/track.png" width="100" height="36" /></a></td>';
					}
					str+='<td style="width:80px;" class="trackingData">';
					str+=this.orderObj.validOrders[v].order[vv].orderKey + '</td>';
					str+='<td style="width:80px;" class="trackingData">';
					str+=this.orderObj.validOrders[v].order[vv].orderDate.substring(0,10) + '</td>';
					str+='<td style="width:80px;" class="trackingData">';
					str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].status;
					str+='</td>';
					str+='<td style="width:200px;" class="trackingData">Shipment ' + (vvv + 1)+":";
					str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].title; 
					str+='</td>';
					str+='</tr>';
				}
			}
		}
		str+='<tr><td colspan="4">';
	//	str+='<a href="#" onclick="va.sendLineItems(theLineItems);return false"><img src="images/continue.png" width="148" height="44" /></a>';
		str+='</td></tr>';
		str+='</table></form>';
		return str;
	},
	displayReturns:function(){
		var str='';
		str+='<form name="theLineItems"><table border="0">';
		for(var v=0;v<this.orderObj.validOrders.length;v++){
			for(var vv=0;vv<this.orderObj.validOrders[v].order.length;vv++){
				for(var vvv=0;vvv<this.orderObj.validOrders[v].order[vv].orderItems.length;vvv++){
					str+='<tr>';
					str+='<td style="width:20px;" class="tableData"><input style="width:20px;" class="tableData" type="checkbox" name="validOrder"'+v+' value="';
					str+=this.orderObj.validOrders[v].order[vv].orderItems[vvv].lineID + '"/></td>';
			//		str+='<td class="tableData">' + this.orderObj.validOrders[v].price + '</td>';
					str+='<td style="width:200px;" class="tableData">' + this.orderObj.validOrders[v].order[vv].orderItems[vvv].title + '</td>';
					str+='<td style="width:30px;" class="tableData">ISBN</td>';
					str+='<td style="width:80px;" class="tableData">' + this.orderObj.validOrders[v].order[vv].orderItems[vvv].ISBN + '</td>';
			//		str+='<td class="tableData">' + this.orderObj.validOrders[v].dueDate + '</td>';
			//		str+='<td class="tableData">' + this.orderObj.validOrders[v].status + '</td>';
					str+='</tr>';
				}
			}
		}
		str+='<tr><td colspan="4">';
		str+='<a href="#" onclick="va.sendLineItems(theLineItems);return false"><img src="images/continue.png" width="148" height="44" /></a></td></tr>';
		str+='</table></form>';
		return str;
	},
	buildReason:function(strArg){
		var str='';
		str+='<form name="theForm"><table border="0">';
		str+='<tr><td colspan="2" class="tableData">';
		str+=strArg + '</td></tr>';


		str+='<tr><td colspan="2" class="tableData">&nbsp;</td></tr>';
		str+='<tr><td style="width:20px;"><input style="width:20px;" class="tableData" type="radio" name="reason" value="done"/></td>';
		str+='<td class="tableData" style="width:450px;">I am done with my rental period.</td></tr>';
		str+='<tr><td style="width:20px;"><input style="width:20px;" class="tableData" type="radio" name="reason" value="refund"/></td>';
		str+='<td class="tableData" style="width:450px;">I would like to return my item for a refund. (Must be within 30 days of the date you placed your order.)</td></tr>';
		str+='<tr><td style="width:20px;"><input style="width:20px;" class="tableData" type="radio" name="reason" value="different"/></td>';
		str+='<td class="tableData" style="width:450px;">I received a different book than I ordered.</td></tr>';
		str+='<tr><td style="width:20px;"><input style="width:20px;" class="tableData" type="radio" name="reason" value="damaged"/></td>';
		str+='<td class="tableData" style="width:450px;">I received a damaged book.</td></tr>';
		str+='<tr><td style="width:20px;"><input style="width:20px;" class="tableData" type="radio" name="reason" value="duplicate"/></td>';
		str+='<td class="tableData" style="width:450px;">I received a duplicate or extra book.</td></tr>';
		str+='<tr><td colspan="2" class="tableData">&nbsp;</td></tr>';
		str+='<tr><td colspan="2">';
		str+='<a href="#" onclick="va.processXML(theForm);return false"><img src="images/continue.png" width="148" height="44" /></a></td></tr>';
		str+='</table></form>';
		return str;
	},
	buildLogin:function(){
		var str='';
		str+='<table><tr><td colspan="2">&nbsp;</td></tr>';
		str+='<tr><td class="tableHead">LAST NAME</td><td>';
		str+='<input class="tableData" type="text" name="username" id="username"/></td></tr>';
		str+='<tr><td class="tableHead">EMAIL</td><td>';
		str+='<input class="tableData" type="text" name="useremail" id="useremail"/></td></tr>';
		str+='<tr><td class="tableHead">BILLING ZIP CODE</td><td>';
		str+='<input class="tableData" style="width:80px;" type="text" name="zipcode" id="zipcode"/></td></tr><tr><td colspan="2">';
		str+='<a href="#" onclick="va._attemptLogin();return false"><img src="images/continue.png" width="148" height="44" /></a></td></tr></table>';
		return str;
	},
	newEmail:function(){
		var str='';
		str+='<table><tr><td colspan="2">&nbsp;</td></tr>';
		str+='<tr><td class="tableHead">NEW EMAIL</td><td>';
		str+='<input class="tableData" type="text" name="newEmail" id="newEmail"/></td></tr>';
		str+='<tr><td colspan="2">';
		str+='<a href="#" onclick="va._changeEmail();return false"><img src="images/continue.png" width="148" height="44" /></a></td></tr></table>';
		return str;
	},
    _changeEmail: function(){
        var _alert="";
		var newEmail=document.getElementById("newEmail").value;
		var useremailRegExp=/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
		if(useremailRegExp.test(newEmail)==false){
			_alert+="Invalid email address," ;
		}
		if(_alert.length>0){
			var str="Please correct the following information.\n\n";
			for(var l=0;l<_alert.split(',').length;l++){
				if(_alert.split(',')[l].length>0){
					str+=_alert.split(',')[l] + ".\n";
				}
			}
			alert(str);
			return;
		}else{
			var _options = {
					ignoreAnswer:false,
					initDial: true
				};
			var params = {
				'InText':newEmail,
				'ContextId':this.contextID,
				'InterlocutorId':this.interlocutorID,
				'InUrl':''
			};
			this.log(params);
			this.doAjax(params, 'post', _options);
		}
	},
    _attemptLogin: function(){
		var me=this;
		var _options = {
			ignoreAnswer:false,
			initDial: true
		}
        var _alert="";
		var username=document.getElementById("username").value;
		var usernameRegExp=/\w/;
		if(usernameRegExp.test(username)==false){
			_alert+="Username can have no spaces or special characters," ;
		}
		var useremail=document.getElementById("useremail").value;
		var useremailRegExp=/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
		if(useremailRegExp.test(useremail)==false){
			_alert+="Invalid email address," ;
		}
		var zipcode=document.getElementById("zipcode").value;
		var zipcodeRegExp=/\d{5}/;
		if(zipcodeRegExp.test(zipcode)==false){
			_alert+="Zip codes must contain exactly five (5) digits," ;
		}
		if(_alert.length>0){
			var str="Please correct the following information.\n\n";
			for(var l=0;l<_alert.split(',').length;l++){
				if(_alert.split(',')[l].length>0){
					str+=_alert.split(',')[l] + ".\n";
				}
			}
			alert(str);
			me.myAlert(str);
		}else{
			if (typeof ActiveXObject != "undefined") {
				var cid=me.contextID;
	//			var cid=true;
			}else{
				var cid=me.contextID;
			}
			var params = {
				'InText':"username="+username+"&&useremail="+useremail+"&&zipcode="+zipcode,
				'ContextId':cid,
				'InterlocutorId':me.interlocutorID,
				'InUrl':''
			};
			me.log(params);
			document.getElementById("virtuoz_loading").style.visibility="visible";
			document.getElementById("virtuoz_loading").style.display="block";
	        me.doAjax(params, 'post', _options);
		}
    },
	sendLineItems: function(theLineItemsForm) {
        var options = {
                ignoreAnswer:false,
                initDial: true
            };
		var myString="##SkipAlyze#";
		var prefix='return_';
		for(var z=0;z<theLineItemsForm.elements.length;z++){
			if(theLineItemsForm.elements[z].checked){
				myString+=prefix;
				myString+=theLineItemsForm.elements[z].value;
			}
		}
		var me=this;
		var params = {
			'InText':	myString,
			'ContextId':this.contextID,
			'InterlocutorId':this.interlocutorID,
			'InUrl':''
		};
        this.log(params);
		this.doAjax(params, 'post', options);
    },
	processXML: function(radioObj) {
        var options = {
                ignoreAnswer:false,
                initDial: true
            };
		var r="none";
		var radioLength = radioObj.elements.length;
		for(var i = 0; i < radioLength; i++) {
			if(radioObj.elements[i].checked) {
				r=radioObj.elements[i].value;
			}
		}
		var me=this;
		var params = {
			'InText':r,
			'ContextId':this.contextID,
			'InterlocutorId':this.interlocutorID,
			'InUrl':''
		};
        this.log(params);
		document.getElementById("virtuoz_loading").style.visibility="visible";
		document.getElementById("virtuoz_loading").style.display="block";
		this.doAjax(params, 'post', options);
   },
	myAlert:	function (str){
}
});

Event.observe(window,'load', function(){
    va=new VirtuozAgent();
})
