/// <reference path="D:\SiteData\scripts\wsi.js"/>

/******************************************
*
*  General Classes, functions and Properties 
*
*******************************************/

// Root level namespace for this js file
Safemart = new Object();

Safemart.Init = function()
{
    if (document.getElementById("CustomerCenterPage") != null)
    {
        /// Initialize the CustomerCenter
       //CustomerCenter = new Safemart.CustomerCenter();
       CustomerCenter.Login();
    }
}


/******************************************
*
*  Constructor Classes for base safemart objects
*
*******************************************/
Safemart.Address = function()
{
/// <summary>Basic Address Constructor</summary>
/// <returns>Address Object</returns>
    this.InternalId = "";
    this.FirstName = "";
    this.LastName = "";
    this.Company = "";
    this.AddressLine1 = "";
    this.AddressLine2 = "";
    this.City = "";
    this.State = "";//"AL";
    this.Zip = "";
    this.Country = "";//"US";
    this.Phone = "";
    this.Type = ""; /// Shipping type for a purchase order
    this.Cost = 0; /// Shipping cost for a purchase order
    this.Memo = "";
    this.Raw = ""; /// The raw data string from the server.
    
    this.IsPhoneValid = function()
    {
        /// 99 9999 9999
        /// 999-999-9999
        /// +99 (9) 9 9999 9999
        /// (999) 999-9999
        /// 999-999-9999 ext9999
        /// 999-999-9999 ext 9999
        var _sPhoneReg = /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( ext | ext)\d{1,5}){0,1}$/;
        
        var _oRegex = new RegExp(_sPhoneReg);
        var _bPassed = _oRegex.test(this.Phone);
        
        return _bPassed;
    }
    
    this.InvalidPhoneMsg = "Please enter a valid phone number";
}

Safemart.CreditCard = function()
{
    this.InternalId = "";
    this.Type = "Visa";
    this.NameOnCard = "";
    this.Number = "";
    this.ExpirationMonth = "";
    this.ExpirationYear = "";
    this.CVV2 = "";
}


Safemart.Item = function()
{
    this.Sku = "";
    this.Description = "";
    this.Rate = 0;
    this.Amount = 0;
}

Safemart.Transaction = function()
{
    var _xml = null;
    this.GetDate = function(){return _xml.getElementsByTagName("month")[0].firstChild.nodeValue;};
    this.OrderNumber = "";
    this.Total = "";
    this.Status = "";
    this.Items = new Array();
    
    this.AddItem = function(sku)
    {
        this.Items.push(new Safemart.Item());
        var _NewItem = this.Items[this.Items.length-1];
        _NewItem.Sku = sku;
        return _NewItem;
    }
    
    
    this.Xml = function(xml)
    {
        if (typeof(xml) != "undefined")
        {
            _xml = getDomAdapter().parseXml(xml);
            //alert(getDomAdapter().serialize(_xml));
        }
        //alert(this.GetDate());
        if (_xml != null)
        {
            return _xml;
        }
    }
}

Safemart.Transactions = function()
{
    this.SalesOrders = new Array();
    
    this.AddSalesOrder = function(xml)
    {
        this.SalesOrders.push(new Safemart.Transaction());
        var _xNewSalesOrder = this.SalesOrders[this.SalesOrders.length-1]
        _xNewSalesOrder.Xml(xml);
        
        return _xNewSalesOrder;
    }
    
    var _xml = null;
    
    this.Xml = function(xml)
    {
        if (typeof(xml) != "undefined")
        {
            _xml = getDomAdapter().parseXml(xml);
            
            var _xSalesOrder = _xml.getElementsByTagName("salesorder");
            
            for (var i=0; i < _xSalesOrder.length; i++)
            {
                this.AddSalesOrder(getDomAdapter().serialize(_xSalesOrder[i]));
            }
            
            //alert(getDomAdapter().serialize(_xml));
        }
        
        if (_xml != null)
        {
            return _xml;
        }
    }
}

Safemart.Person = function()
{
/// <summary>Base class for create a person</summery>
///<returns>Person Object</returns>
    this.SalesRep = "";
    //this.InternalID = "";
    var InternalID = "";
    this.Email = "";
    var HasAccount = null; /// a null = an unknown state
    this.Password = "";
    this.PassConfirm = "";
    this.Ship = new Safemart.Address();
    this.Bill = new Safemart.Address();
    this.Bill.SameAsShip = true;
    var _PaymentMethod = "";
    this.CreditCard = new Safemart.CreditCard();
    this.CreditCard.CardsOnFile = new Array();
    this.IP = "";
    this.InternalIP = false;
    
    /// <summary>Get or Set Internal NetSuite Id</summery>
    ///<param name="ID">(Optional) Set Internal NetSuite Id</param>
    ///<returns>Internal NetSuite Id</returns>
    this.InternalID = function(Id)
    {
        if (typeof(Id) != "undefined" && Id != null && Id.length > 0) InternalID = Id;
        return InternalID;
    }
    
    this.PaymentMethod = function(paymentMethod)
    {
        if (typeof(paymentMethod) != "undefined" && paymentMethod != null && paymentMethod.length > 0) _PaymentMethod = paymentMethod;
        return _PaymentMethod;
    }
    
    this.Transactions = new Safemart.Transactions();
    
    this.HasAccount = function(){return HasAccount};
    
    this.HasAccountCheckReturn = function(returnData)
    {
trace = "";

        if (returnData.toLowerCase() == "false")
        {
trace += "Account not found";
            HasAccount = false;
        }
        else
        {
trace += " return: " + returnData;        
trace += " ID: " + InternalID;
trace += " len: " + InternalID.length;
            HasAccount = true;

            if (returnData != "true" && InternalID.length == 0 && InternalID.indexOf("error") == -1)
            {
                
                InternalID = returnData;
            }
        }
//window.status = trace;        
    }
    
    
    var _sLoginReturn = null;
    this.LoginEventHandler = function(handler)
    {
        _sLoginReturn = handler;
    }
    
    this.login = function()
    {
    /// <summary>Login the person</summary>
    /// <param name="callBack">Call Back Function</param>
    /// <returns>void</returns>
    
    	document.getElementById("CheckoutNotificationCaption").innerHTML = "Customer Login";
	    document.getElementById("CheckoutNotificationMessage").innerHTML = "<br /><br /><center>Login in progress...</center><br /><br />";
        YAHOO.example.container.panel1.show();
       
        var SessionID = (wsi._Cookie.GetCrumb("SessionID") == null ? "" : wsi._Cookie.GetCrumb("SessionID"));
    
        var aParameters = new wsi._Parameters();
        aParameters.Add("sessionID",SessionID);
        aParameters.Add("email",this.Email);
        aParameters.Add("password",this.Password);
        
        wsi._Soap.AddCall("CustomerLogin", _sLoginReturn, aParameters);
    }
    
    this.LoginPrompt = function(loginProcesser)
    {
        var _sLoginScreen = '' +
                '<div id="substepAccount" class="basicContainer-Body" style="display: block;">'+
                '<table border="0" cellspacing="5px">'+
                   '<tr>'+
                        '<td colspan="2">'+
                            '<b>To login enter your email and password.</b>'+
                        '</td>'+
                    '</tr>'+
                    '<tr>'+
                        '<td>'+
                            'Email Address:'+
                            '<br />'+
                            '<input type="text" id="LoginPromptEmail" />'+
                            '<br />'+
                            'Password:'+
                            '<br />'+
                            '<input type="password" id="LoginPromptPassword" />'+
                            '<br />'+
                        '</td>'+
                        '<td>'+
                        '</td>'+
                    '</tr>'+
                    '<tr>'+
                       '<td style="color:red;">'+
                            '<div id="LoginPromptMessage" style="visibility:hidden;">Please enter both your email address and password<div>'+
                        '</td>'+
                        '<td align="right" valign="bottom">'+
                            '<input id="LoginPromptButtonClick" type="hidden" value="" />'+
	                        '<input type="button" onclick="document.getElementById(\'LoginPromptButtonClick\').value = \'Login\'; '+loginProcesser+';" value="Login" />'+
	                        '&nbsp;'+
                            '<input type="button" onclick="document.getElementById(\'LoginPromptButtonClick\').value = \'Cancel\'; '+loginProcesser+';" value="Cancel" />'+
                        '</td>'+
                    '</tr>'+
                '</table>'+
            '</div>';
            
        document.getElementById("CheckoutNotificationCaption").innerHTML = "Customer Login";
        document.getElementById("CheckoutNotificationMessage").innerHTML = _sLoginScreen;
        YAHOO.example.container.panel1.show();
    }
    
    this.LoginPromptCallback = function()
    {
        /// reset the failure message.
        document.getElementById("LoginPromptMessage").style.visibility = "hidden";
        
        if (document.getElementById("LoginPromptButtonClick").value == "Cancel")
        {
            alert("You must enter a valid Email and Password to access your account");
            YAHOO.example.container.panel1.hide();
        }
        else
        {
            var _sEmail = document.getElementById("LoginPromptEmail").value;
            var _sPassword = document.getElementById("LoginPromptPassword").value;

            if(_sEmail.length > 0 && _sPassword.length > 0)
            {
                this.Email = _sEmail;
                this.Password = _sPassword;
                YAHOO.example.container.panel1.hide();
                
                this.login();
            }
            else
            {
                document.getElementById("LoginPromptMessage").style.visibility = "visible";
            }
        }
    }
    this.LoginCallback = function(returnData)
    {
        
        if (returnData.substring(0,5) == "error")
        {
            //document.getElementById("LoginMessage").innerHTML = returnData.substring(7);
            //document.getElementById("LoginMessage").style.color = "Red";
            
        }
        else
        {
       
            //document.getElementById("substepLogin").style.display = "none";
            //Checkout.ShowStep(Checkout.Steps[1]);
              
            var Rows = returnData.split("||");
            
            for(var iRow=0; iRow<Rows.length; iRow++)
            {
                var Fields = Rows[iRow].split("|");
                
                if (Rows[iRow].indexOf("Customer|") > -1)
                {
                    for (var iFields=0; iFields<Fields.length; iFields++)
                    {
                        var Values = Fields[iFields].split("=");
                        switch(Values[0])
                        {
                            case "InternalId":
                                this.InternalID = Values[1];
                                break;
                               
                            case "FirstName":
                                this.Ship.FirstName = Values[1];
                                break;
                                
                            case "LastName":
                                this.Ship.LastName = Values[1];
                                break;
                                
                            case "CompanyName":
                                this.Ship.Company = Values[1];
                                break;
                                
                            case "Email":
                                this.Email = Values[1];
                                break;
                        }
                    }
                }
                
                if (Rows[iRow].indexOf("isShip=True") > 0)
                {
                    for (var iFields=0; iFields<Fields.length; iFields++)
                    {
                        var Values = Fields[iFields].split("=");
                        switch(Values[0])
                        {
                        
                            case "InternalId":
                                this.Ship.InternalId = Values[1];
                                break;
                                
                           case "Addressee":
                                this.Ship.Company = Values[1];
                                break;
                                
                           case "Attention":
                                // Override the Customer First and Last Name
                    	        var l_nDelimiter = Values[1].indexOf(' ');
				                var First = Values[1].substring(0,l_nDelimiter)
				                var Last = Values[1].substring(l_nDelimiter + 1, Values[1].length);
        				
                                this.Ship.FirstName = First;
                                this.Ship.LastName = Last;
                                break;
                                                
                            case "Address1":
                                this.Ship.AddressLine1 = Values[1];
                                break;
                                    
                            case "Address2":
                                this.Ship.AddressLine2 = Values[1];
                                break;
                            
                            case "City":
                                this.Ship.City = Values[1];
                                break;
                            
                            case "State":
                                this.Ship.State = Values[1];
                                break;
                                
                            case "Zip":
                                this.Ship.Zip = Values[1];
                                break;
                                
                            case "Country":
                                this.Ship.Country = Values[1];
                                break;
                                
                            case "Phone":
                                this.Ship.Phone = Values[1];
                                break;
                        }
                    }
                }
                
                if (Rows[iRow].indexOf("isBill=True") > 0 && Rows[iRow].indexOf("isShip=True") > 0)
                {
                    this.Bill.SameAsShip = true;
                }
                else if(Rows[iRow].indexOf("isBill=True") > 0)
                {
                    this.Bill.SameAsShip = false;
                    
                    for (var iFields=0; iFields<Fields.length; iFields++)
                    {
                        var Values = Fields[iFields].split("=");
                        switch(Values[0])
                        {
                            case "InternalId":
                                this.Bill.InternalId = Values[1];
                                break;
                                
                            case "Addressee":
                                this.Bill.Company = Values[1]
                                break;
                                
                            case "Attention":
                    	        var l_nDelimiter = Values[1].indexOf(' ');
				                var First = Values[1].substring(0,l_nDelimiter)
				                var Last = Values[1].substring(l_nDelimiter + 1, Values[1].length);
        				
                                this.Bill.FirstName = First;
                                this.Bill.LastName = Last;
                                break;
                                
                            case "Address1":
                                this.Bill.AddressLine1 = Values[1];
                                break;
                                    
                            case "Address2":
                                this.Bill.AddressLine2 = Values[1];
                                break;
                            
                            case "City":
                                this.Bill.City = Values[1];
                                break;
                            
                            case "State":
                                this.Bill.State = Values[1];
                                break;
                                
                            case "Zip":
                                this.Bill.Zip = Values[1];
                                break;
                                
                            case "Country":
                                this.Bill.Country = Values[1];
                                break;
                                
                            case "Phone":
                                this.Bill.Phone = Values[1];
                                break;
                        }
                    }
                }
                
                if (Rows[iRow].indexOf("Card|") > -1)
                {
                this.CreditCard.CardsOnFile[this.CreditCard.CardsOnFile.length] = Checkout._NewCard();
                Card = this.CreditCard.CardsOnFile[this.CreditCard.CardsOnFile.length-1];
                
                    for (var iFields=0; iFields<Fields.length; iFields++)
                    {
                        var Values = Fields[iFields].split("=");
                        switch(Values[0])
                        {
                            case "InternalId":
                                Card.InternalId = Values[1];
                                break;
                                
                            case "isDefault":
                                if (Values[1] == "true")
                                {
                                    Card.Default = true;
                                }
                                break;  
                                
                            case "Type":
                                Card.Type = Values[1];
                                break; 
                                
                            case "NameOnCard":
                                Card.NameOnCard = Values[1];
                                break;  
                                
                            case "Number":
                                Card.Number = Values[1];
                                break; 
                                
                            case "Expiration":
                                Card.Expiration = Values[1];
                                break;                          
                        }
                    }
                }
            }
        }
    }
    
    this.IsEmailValid = function()
    {
    
        //var _sEmailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
        //var _sEmailReg = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$";
        //var _sEmailReg = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$";
        var _sEmailReg = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;
        var _oRegex = new RegExp(_sEmailReg);
        var _bPassed = _oRegex.test(this.Email);
        //
        return _bPassed;
    }
    
    this.ValidatePassword = function()
    {
        // Must be at least 6 characters
        // Must contain at least 1 number
        // Must contain at least 1 Alpha character
        //var sEmailReg = /^(?=.*\d)(?=.*[A-Za-z])\w{6,}$/; ; 
        
        // Original ^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
        var sEmailReg = /^.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*$/
                
        var oRegex = new RegExp(sEmailReg);
        var bValid = oRegex.test(this.Password);
//window.status = bValid;
        return bValid;
       //return true;
    }
}

Safemart.FormHandler = function(formName, submitTo, submittedAt)
{
    var _FormName = formName;
    var _SubmitTo = submitTo;
    var _SubmittedAt = submittedAt;
    
    this.OnSubmited = function(){};
    this.OnError = function(){"",""}; // param1 = exception; param2 = message
    
    this.AdvanceField = function(fromField, toField, onCharCount)
    {
        if (fromField.value.length == onCharCount)
        {
            toField.focus();
        }
    }
    
    this.Submit = function()
    {
        var bPassedRequired = true;
        var sFormData = "";
        
        for(var i=0; i<document.getElementById(_FormName).elements.length; i++)
        {
            if (sFormData.length > 0)
            {
                sFormData += "|";
            }
            
            var sName = document.getElementById(_FormName).elements[i].name;
            var sTag = document.getElementById(_FormName).elements[i].tagName.toLowerCase();
            var sValue = "";
            
            switch(sTag)
            {
                case "select":
                    var s = document.getElementById(_FormName).elements[i];
                    //var s = document.getElementById("citySelector");
                    sValue = s.options[s.selectedIndex].text;
                    break;
                    
                default:
                    sValue = document.getElementById(_FormName).elements[i].value;
            }
            
            sFormData += sName + " = " + sValue;
            
            sReqired = document.getElementById(_FormName).elements[i].getAttribute("required");
            
            if (sReqired != null && sReqired.toLowerCase() == "true")
            {
                if (document.getElementById(_FormName).elements[i].value.length == 0)
                {
                    bPassedRequired = false;
                    break;
                }
            }
        }
        
        if (bPassedRequired)
        {
            var aParameters = new wsi._Parameters();
            aParameters.Add("submitTo", _SubmitTo);
            aParameters.Add("submitedAt", _SubmittedAt);
            aParameters.Add("formData", sFormData);
            wsi._Soap.AddCall("SubmitForm", this.OnSubmited, aParameters);
        }
        else
        {
            this.OnError("SubmissionError", "Please complete all required fields");
        }

        return "";
    }
}


Safemart.QueryString = function()
{
    var _QueryList = document.location.search.substring(1).split("&"); 
    
    this.Find = function(param)
    {
        param+="=";
        var i = _QueryList.findAt(param,0,"contains");
        var value = null; /// default return value
        if (i != -1)
        {
            var delimiter = param.length;
            value = _QueryList[i].substring(delimiter);
        }
        
        return value;
    }
}

/******************************************
*                                         *
*        End Constructor Classes          *
*                                         *
*******************************************/


/******************************************
*                                         *
*             Customer Center             *
* Page specific functions and objects     *
*                                         *
*******************************************/
CustomerCenter = function()
{
}

CustomerCenter.Customer = new Safemart.Person();

CustomerCenter.Login = function()
{
    document.getElementById("LoginFailure").style.display = "none";
    CustomerCenter.Customer.LoginEventHandler(CustomerCenter.Customer.LoginReturn);
    CustomerCenter.Customer.LoginPrompt("CustomerCenter.Customer.LoginPromptCallback()");
}

CustomerCenter.Customer.GetSalesOrderReturn = function(returnValue)
{
    CustomerCenter.Customer.Transactions.Xml(unescape(returnValue));
    
    
}

CustomerCenter.Customer.LoginReturn = function(returnValue)
{
    CustomerCenter.Customer.LoginCallback(returnValue);
    //document.getElementById("CustomerWelcome").innerHTML = returnValue;
    var aParameters = new wsi._Parameters();
    aParameters.Add("internalId",CustomerCenter.Customer.InternalID);
    wsi._Soap.AddCall("GetSalesOrder", CustomerCenter.Customer.GetSalesOrderReturn, aParameters);
    
    YAHOO.example.container.panel1.hide();
    
    if (CustomerCenter.Customer.InternalID.length > 0)
    {
        
        var _sName = CustomerCenter.Customer.Ship.FirstName;
        _sName += " " + CustomerCenter.Customer.Ship.LastName;
        
        document.getElementById("CustomerCenter_Name").innerHTML = _sName;

        var _sShipCompanyName = CustomerCenter.Customer.Ship.Company;
        var _sShipAddress1 = CustomerCenter.Customer.Ship.AddressLine1;
        var _sShipAddress2 = CustomerCenter.Customer.Ship.AddressLine2;
        var _sShipCity = CustomerCenter.Customer.Ship.City;
        var _sShipState = CustomerCenter.Customer.Ship.State;
        var _sShipZip = CustomerCenter.Customer.Ship.Zip;
        var _sShipCountry = CustomerCenter.Customer.Ship.Country;
        
        if (_sShipCompanyName.length > 0)
        {
            with(document.getElementById("CustomerCenter_ShipCompanyName"))
            {
                innerHTML = _sShipCompanyName;
                style.display = "block";
            }
        }
        
        if (_sShipAddress1.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipAddress1"))
            {
                innerHTML = _sShipAddress1;
                style.display = "block";
            }
        }
        
        if (_sShipAddress2.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipAddress2"))
            {
                innerHTML = _sShipAddress2;
                style.display = "block";
            }
        }
        
        if (_sShipCity.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipCity"))
            {
                innerHTML = _sShipCity;
                style.display = "block";
            }
        }
        
        if (_sShipState.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipState"))
            {
                innerHTML = _sShipState;
                style.display = "block";
            }
        }
        
        if (_sShipZip.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipZip"))
            {
                innerHTML = _sShipZip;
                style.display = "block";
            }
        }
        
        if (_sShipCountry.length > 0)
        {
            with (document.getElementById("CustomerCenter_ShipCountry"))
            {
                innerHTML = _sShipCountry;
                style.display = "block";
            }
        }
        
        
        if(CustomerCenter.Customer.Bill.SameAsShip)
        {
            document.getElementById("CustomerCenter_BillSameAsShip").innerHTML = "Same as Shipping";
            document.getElementById("CustomerCenter_BillSameAsShip").style.display = "block";
        }
        else
        {
        
            var _sBillCompanyName = CustomerCenter.Customer.Bill.Company;
            var _sBillAddress1 = CustomerCenter.Customer.Bill.AddressLine1;
            var _sBillAddress2 = CustomerCenter.Customer.Bill.AddressLine2;
            var _sBillCity = CustomerCenter.Customer.Bill.City;
            var _sBillState = CustomerCenter.Customer.Bill.State;
            var _sBillZip = CustomerCenter.Customer.Bill.Zip;
            var _sBillCountry = CustomerCenter.Customer.Bill.Country;
                
            if (_sBillCompanyName.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillCompanyName"))
                {
                    innerHTML = _sBillCompanyName;
                    style.display = "block";
                }
            }
            
            if (_sBillAddress1.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillAddress1"))
                {
                    innerHTML = _sBillAddress1;
                    style.display = "block";
                }
            }
            
            if (_sBillAddress2.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillAddress2"))
                {
                    innerHTML = _sBillAddress2;
                    style.display = "block";
                }
            }
            
            if (_sBillCity.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillCity"))
                {
                    innerHTML = _sBillCity;
                    style.display = "block";
                }
            }

            if (_sBillState.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillState"))
                {
                    innerHTML = _sBillState;
                    style.display = "block";
                }
            }

            if (_sBillZip.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillZip"))
                {
                    innerHTML = _sBillZip;
                    style.display = "block";
                }
            }
                
            if (_sBillCountry.length > 0)
            {
                with (document.getElementById("CustomerCenter_BillCountry"))
                {
                    innerHTML = _sBillCountry;
                    style.display = "block";
                }
            }
              
        }
        
        document.getElementById("CustomerCenterPage").style.display = "block";
    }
    else
    {
         document.getElementById("LoginFailure").style.display = "block";
    }
    
   
}
/******************************************
*                                         *
*             Customer Center             *
*                                         *
*******************************************/


/// Product Page Class
/// Here we centralized the parsing code.
/// Use these functions to get Product Data from the page.
Safemart.ProductPage = new Object();

// Get the Product Sku
Safemart.ProductPage.GetSku = function()
{
    if (document.getElementById("PartNumber") != null)
    {
        return document.getElementById("PartNumber").innerHTML.substring(13);// remove "Part Number: "
    }
    else
    {
        return "";
    }
}




// Review Class
Safemart.Review = new Object();

Safemart.Review.Customer = new Safemart.Person();

Safemart.Review.Stars = "Not Set";
// Save Review function
Safemart.Review.Save = function()
{
    
    _bValidated = true;
    
    var _sDisplayName = document.getElementById("DisplayName").value;
    var _sEmail = document.getElementById("Email").value;
    Safemart.Review.Customer.Email = _sEmail;
    var _sHeadline = document.getElementById("Headline").value;
    var _sRating = document.getElementsByName("");
    var _sReview = document.getElementById("Comments").value;
    
    if (_sDisplayName.length == 0) _bValidated = false;
    if (_sEmail.length == 0) _bValidated = false;
    if (_sHeadline.length == 0) _bValidated = false;
    if (_sReview.length == 0) _bValidated = false;
    if (Safemart.Review.Stars == "Not Set") _bValidated = false;


    if (!_bValidated)
    {
        document.getElementById("ReviewKickbackMessage").innerHTML = "Please complete all fields.";
    }
    else if (!Safemart.Review.Customer.IsEmailValid())
    {
        document.getElementById("ReviewKickbackMessage").innerHTML = "Please include a valid email address.";
    }
    else
    {
        document.getElementById("MyReview").style.display = "none";
        document.getElementById("ReviewThankyou").style.display = "block";
        
        var aParameters = new wsi._Parameters();
        aParameters.Add("productId",Safemart.ProductPage.GetSku());
        aParameters.Add("displayName",_sDisplayName);
        aParameters.Add("email",_sEmail);
        aParameters.Add("headline",_sHeadline);
        aParameters.Add("rating",Safemart.Review.Stars);
        aParameters.Add("review",_sReview);

        wsi._Soap.AddCall("SaveReview", Safemart.Review.SaveReturn, aParameters);
    }
}

/// Save Review Callback function
Safemart.Review.SaveReturn = function(returnValue)
{
    //document.getElementById("ReviewThankyou").innerHTML = returnValue;
}




function getDomAdapter()
{
	var adapter = '';
	if ('undefined' != typeof ActiveXObject) {
		adapter = 'MS';
	} else if ('undefined' != typeof document
		&& document.implementation
		&& document.implementation.createDocument
		&& 'undefined' != typeof DOMParser)
	{
		adapter = 'default';
	}
	switch (adapter) {
		case 'MS':
			return new (function () {
				this.createDocument = function () {
					var names = ["Msxml2.DOMDocument.6.0",
						"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument",
						"MSXML.DOMDocument", "Microsoft.XMLDOM"];
					for (var key in names) {
						try {
							return new ActiveXObject(names[key]);
						} catch (e) {}
					}
					throw new Error('Unable to create DOMDocument');
				};
				this.serialize = function (doc) {
					return doc.xml;
				};
				this.parseXml = function (xml) {
					var doc = this.createDocument();
					if (!doc.loadXML(xml)) {
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		case 'default':
			return new (function () {
				this.createDocument = function () {
					return document.implementation.createDocument("", "", null);
				};
				this.serialize = function (doc) {
					return new XMLSerializer().serializeToString(doc);
				};
				this.parseXml = function (xml) {
					var doc = new DOMParser().parseFromString(xml, "text/xml");
					if ("parsererror" == doc.documentElement.nodeName) {
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		default:
			throw new Error('Unable to select the DOM adapter');
	}
};