﻿function InitLoginWindow() {
    if (window.opener && !window.opener.closed) {
        if (typeof (window.opener.location) == "object") {
            window.opener.location.href = location.href.split("?")[0];
        }
        window.opener.focus();
        window.close();
    }
}

function SubmitOnEnter(oEvent, callback) {
    if (navigator.userAgent.indexOf("MSIE") > 1)
        return;
    if (oEvent && oEvent.keyCode) {
        if (oEvent.keyCode == 13) {
            callback();
        }
    }
}

function Login() {
    if (window.event)
        event.returnValue = false;
        
    var username = document.getElementById("txtUser").value;
    var password = document.getElementById("txtPassword").value;

    var url = CreateUrl("Authentication/Login", "username", username, "password", password);
    
    Request.executeCallback("LoginResponse", url);

}

function CreateHttpsUrl(sAction) {
    var sUrl = location.href;
    if (sUrl.indexOf(".com/") > 1 && sUrl.indexOf("zeus") < 1) {
        var nonQuery = sUrl.split('?')[0];
        var pos = nonQuery.toLowerCase().lastIndexOf("index.htm");
        var nonQuery = nonQuery.substring(0, pos) + sAction;
        return nonQuery.replace("http:", "https:");
    }

    return sAction;
}

function LoginResponse(result)
{
    if (result == "ok")
    {
        var url = Url.getValue("ReturnUrl");
        if (url == null)
            url = CreateHttpsUrl("Contacts/");
        location.href = url;
    }
    else
    {
        var oError = document.getElementById("lblError");
        if (oError == null) {
            alert('Invalid user name or password');
//            alert(ELEMENT_NOT_FOUND + "lblError");
            return;
        }
        oError.style.display ="";
    }
}

function LoginRemoteDelete(url) {
    if (window.event)
        event.returnValue = false;

    var username = document.getElementById("username").value;
    var password = document.getElementById("password").value;

    var url = CreateUrl(url, "username", username, "password", password);

    Request.executeCallback("RemoteDeleteLoginResponse", url);

}

function RemoteDeleteLoginResponse(result) {
    if (result == "ok") {
        var url = Url.getValue("ReturnUrl");
        if (url == null)
            url = CreateHttpsUrl("RemoteManagementUI/");
        location.href = url;
    }
    else {
        var oError = document.getElementById("lblError");
        if (oError == null) {
            alert('Wrong user name or password');
            //            alert(ELEMENT_NOT_FOUND + "lblError");
            return;
        }
        oError.style.display = "";
    }
}



// Calendar event: UI effects
function InitEditCalendarEvent() {
    if (typeof (opener) == "undefined") {
        return;
    }

    // init start date
    if (typeof (opener.StartTimestamp) != "undefined") {
        var timestamp = opener.StartTimestamp.split("T");
        var date = timestamp[0].split("-");
        var time = timestamp[1].split(":");

        var oStartDate = document.getElementById("txtStartDate");
        var oEndDate = document.getElementById("txtEndDate");
        var oStartTime = document.getElementById("txtStartTime");
        var oEndTime = document.getElementById("txtEndTime");
        
        var oDateTimeFormat = CelleSync.GetSingleton("DateTimeFormat", DateTemplateId);
        var oDate = new Date(date[0].parseInt(), date[1].parseInt() - 1, date[2].parseInt());
        oStartDate.value = oDate.format(oDateTimeFormat.GetTemplate());
            
        oStartTime.value = time[0] + ":" + time[1];
        oEndDate.value = oStartDate.value;
        oEndTime.value = (time[0].parseInt()+1) + ":" + time[1];
    }

    SetAllDayEventState(document.getElementById("AllDayEvent"));
    ShowDivOnSelect(document.getElementById("lstAudioReminder"));
    // SetRecurrenceState();
}

function SetAllDayEvent(oCheckBox) {
    var businessHours = GetInputValueById("BusinessHours");
    var parts = businessHours.split(";");
    if (parts.Length < 2)
        return;
    var oStartTime = document.getElementById("txtStartTime");
    var oEndTime = document.getElementById("txtEndTime");
    if (oCheckBox.checked) {
        oStartTime.defaultValue = oStartTime.value;
        oEndTime.defaultValue = oEndTime.value;
        oStartTime.value = parts[0].trim();
        oEndTime.value = parts[1].trim();
        InputValidator.markControl(oStartTime, false);
        InputValidator.markControl(oEndTime, false);
    }
    else {
        oStartTime.value = oStartTime.defaultValue;
        oEndTime.value = oEndTime.defaultValue;
    }
    oEndTime.disabled = oCheckBox.checked;
    oStartTime.disabled = oCheckBox.checked;

}

function SetAllDayEventState(oCheckBox) {
    var businessHours = GetInputValueById("BusinessHours");
    var parts = businessHours.split(";");
    if (parts.Length < 2)
        return;
    var oStartTime = document.getElementById("txtStartTime");
    var oEndTime = document.getElementById("txtEndTime");

    if (parts[0] == oStartTime.value && parts[1] == oEndTime.value) {
        oCheckBox.checked = true;
        oEndTime.disabled = oCheckBox.checked;
        oStartTime.disabled = oCheckBox.checked;
    }
    
}

function ShowDivOnSelect(oSelect) {
    for (var i = 0; i < oSelect.options.length; i++) {
        var oOption = oSelect.options[i];
        if (oOption.value) {
            var oDiv = document.getElementById(oOption.value);
            if (oDiv == null)
                continue;
            oDiv.style.display = (oOption.selected) ? "block" : "none";

            //set up validation
            var setValidation = oOption.selected;
            var inputs = oDiv.getElementsByTagName("INPUT");
            for (var i = 0; i < inputs.length; i++) {
                var input = inputs[0];
                var sVal = input.getAttribute("val");
                if (sVal != null) {
                    if (setValidation)
                        input.setAttribute("validate", sVal);
                    else
                        input.removeAttribute("validate");
                }
            }
        }
    }    
}
// End Calendar event: UI effects

function OpenContactNew()
{
    var url = CreateUrl(CreateActionUrl("Contacts", "NewContact"));
    var handle = window.open(url, "celleSyncShowDetails", "width=670,height=495,status=no,toolbar=no,menubar=no");        
    handle.focus();
}


function OpenContactEdit(contactCell)
{
    var contactRow = contactCell.parentNode;
    var contactId = contactRow.getElementsByTagName("input")[0].getAttribute("contactId");
    var url = CreateUrl(CreateActionUrl("Contacts", "EditContact"), "contactId", contactId);
    var handle = window.open(url, "celleSyncShowDetails", "width=670,height=495,status=no,toolbar=no,menubar=no");        
    handle.focus();
}

function OpenForgotPassword() {
    var url = CreateUrl("Authentication/InitForgotPassword");
    var handle = window.open(url, "celleSyncShowDetails", "width=400,height=300,status=no,toolbar=no,menubar=no");
    handle.focus();
}

function C() {
    var pop = Request.QueryString("message")
    if (pop == 'ok')
        alert(pop);
}

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
}

function OpenEventNew() {
    window.StartTimestamp = arguments[0];
    var url = CreateUrl(CreateActionUrl("Calendar", "NewEvent"));
    var handle = window.open(url, "celleSyncShowDetails", "width=670,height=495,status=no,toolbar=no,menubar=no");
    handle.focus();
}

function OpenEventEdit(id) {
    var url = CreateUrl(CreateActionUrl("Calendar", "EditEvent"), "eventId", id);
    var handle = window.open(url, "celleSyncShowDetails", "width=670,height=495,status=no,toolbar=no,menubar=no");
    handle.focus();
}

function DeleteAllContacts()
{
    if (confirm(CONFIRM_DELETE_ALL_CONTACTS))
    {
        var url = CreateActionUrl("Contacts", "DeleteAll");
        Request.executeRefresh(url);        
    }
}

function DeleteAllSms() {

    if (!confirm(CONFIRM_DELETE_ALL_SMS))
        return;

    var folderType = GetStateValue("SelectedFolder");
    var deleted = false;
    if (folderType.charAt(0) == "_") {
        folderType = folderType.substr(1);
        deleted = true;
    }
    var currentPage = GetCurrentPage("Sms");
    var url = CreateUrl(CreateActionUrl("Sms", "DeleteAll"), "folderType", folderType);
    Request.executeRefresh(url);
}

function RestoreAllSms() {

    var folderType = GetStateValue("SelectedFolder");
    var deleted = false;
    if (folderType.charAt(0) == "_") {
        folderType = folderType.substr(1);
        deleted = true;
    }
    var currentPage = GetCurrentPage("Sms");
    var url = CreateUrl(CreateActionUrl("Sms", "RestoreAll"), "folderType", folderType);
    Request.executeRefresh(url);

}

function PerformSmsAction(sAction)
{
    var Ids = GetSelectedItems("smsId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    if (sAction == "Delete") {
        if (! confirm(CONFIRM_DELETE_SMS))
            return;
    }
    var folderType = GetStateValue("SelectedFolder");
    var deleted = false;
    if (folderType.charAt(0) == "_") {
        folderType = folderType.substr(1);
        deleted = true;
    }
    var currentPage = GetCurrentPage("Sms");
    var url = CreateUrl(CreateActionUrl("Sms", sAction), "folderType", folderType, "pageNumber", currentPage, "deleted", deleted);    
    Request.executeRefresh(url, Ids);

}

function DeleteContacts() {
    var Ids = GetSelectedItems("contactId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    if (confirm(CONFIRM_DELETE_CONTACTS)) {
        var url = CreateUrl(CreateActionUrl("Contacts", "Delete"), "filter", GetListFilter());
        Request.executeRefresh(url, Ids);
    }
}

function HardDeleteContacts() {
    var Ids = GetSelectedItems("contactId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    if (confirm(CONFIRM_DELETE_CONTACTS)) {
        var url = CreateUrl(CreateActionUrl("Contacts", "HardDelete"));
        Request.executeRefresh(url, Ids);
    }
}

function RestoreAllContacts() {
    var url = CreateUrl(CreateActionUrl("Contacts", "RestoreAll"), "filter", GetListFilter());
    Request.executeRefresh(url);
}

function RestoreContacts() {
    var Ids = GetSelectedItems("contactId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    var url = CreateUrl(CreateActionUrl("Contacts", "Restore"), "filter", GetListFilter());
    Request.executeRefresh(url, Ids);
}

function GetSelectedItems(sName) {
    var Ids = new Array();
    var allContacts = document.getElementsByName(sName);
    var i = 0;
    var j = 0;
    for (i = 0; i < allContacts.length; i++) {
        if (allContacts[i].checked == true) {
            Ids[j] = allContacts[i].getAttribute(sName);
            j++;
        }
    }
    return Ids.join(",");
}

function DeleteAllGallery() {
    
    if (!confirm(CONFIRM_DELETE_ALL_FILES))
        return;
    var controller = GetControllerValue("ControllerType");
    var deleted = GetStateValue("RecycledBin").value == "1";
    var currentPage = GetCurrentPage(controller);
    var url = CreateUrl(CreateActionUrl(controller, "DeleteAll"), "pageNumber", currentPage, "deleted", deleted);
    Request.executeRefresh(url);
}

function OpenEmailPopup() {
    var Ids = GetSelectedItems("fileId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    $("#popUp").modal({
        opacity: 80,
        overlayCss: { backgroundColor: "#E7EDF1" },
        escClose: true,
        containerCss: {
            'backgroundColor': "#E7EDF1",
            'border': "1px solid #95B7CC",
            'height': 200,
            'padding': 50,
            'width': 500,
            'color': 'rgb(69, 118, 151)'
        }
    });
    

}


function SendPhoto() {
    
    var u = document.getElementById("uploadUrl");

    var email = document.getElementById("emails");

    if (email.value == '') {
        alert('Please type an email');
        return;
    }

    var eList = email.value.trim().split(';');

    var notValidEmail = ''; 
    var i = 0;
    for (i = 0; i < eList.length; i++) {
        var res = ValidateEmail(eList[i]);
        if (res == false) {
            notValidEmail += '- ' + eList[i] + '\n';
        }
    }

    if (notValidEmail != '') {
        alert('The emails:\n' + notValidEmail + '\nare not valid');
        return;
    }

    var Ids = GetSelectedItems("fileId");

    var controller = GetControllerValue("ControllerType");
    
    var url = CreateUrl(CreateActionUrl(controller, 'EmailMedia'), "email", email.value);

    $('#loadingImg').css("display", "");

    Request.executeCallback("SendPhotoSuccess", url, Ids);
}

function ValidateEmail(value) {
    var reEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g;
    return Val_regExExact(value, reEmail);
}

//function Val_regExExact(s, re) {
//    if (s == "")
//        return true;
//    var match = s.match(re);
//    if (match == null)
//        return false;
//    return match[0] == s;
//}

function SendPhotoSuccess(result) {
    
    if (result == "ok") {
        $('#loadingImg').css("display", "none");
        alert(FILES_SENT_OK);
        $.modal.close();
    }
    else {
        alert(FILES_SENT_FAIL);
    }
}

function RestoreAllGallery() {
    var controller = GetControllerValue("ControllerType");
    var deleted = GetStateValue("RecycledBin").value == "1";
    var currentPage = GetCurrentPage(controller);
    var url = CreateUrl(CreateActionUrl(controller, "RestoreAll"), "pageNumber", currentPage, "deleted", deleted);
    Request.executeRefresh(url);
}

function PerformGalleryAction(sAction) {
    var Ids = GetSelectedItems("fileId");
    if (Ids == "") {
        alert(MUST_SELECT_ITEMS);
        return;
    }
    if (sAction == "Delete") {
        if (!confirm(CONFIRM_DELETE_FILES))
            return;
    }
    var controller = GetControllerValue("ControllerType");
    var deleted = GetStateValue("RecycledBin").value == "1";
    var currentPage = GetCurrentPage(controller);
    var url = CreateUrl(CreateActionUrl(controller, sAction), "pageNumber", currentPage, "deleted", deleted);
    Request.executeRefresh(url, Ids);

}

function ClearFilter(controller) {
    var oFilter = document.getElementById(FilterElementID);
    if (oFilter == null)
        return;

    if (oFilter.className != "FilterActive")
        return;

    oFilter.value = "";
    // do UI
    OnLeaveFilterBox(controller);

    // do back end
    ShowList(controller, 1);

}

function OnLeaveFilterBox(controller) {
    var oFilter = document.getElementById(FilterElementID);
    if (oFilter == null)
        return;

    var v = oFilter.value.trim();
    if (v != "") {
        oFilter.value = v;
        return;
    }

    oFilter.className = "FilterInactive";
    var toolTip = oFilter.getAttribute("toolTip");
    if (toolTip == null)
        return;
    oFilter.value = toolTip;
}

function SearchOnEnter(oEvent, controller) {
    if (oEvent == null)
        return;
    if (typeof(oEvent.keyCode) == "undefined")
        return;

    var key = oEvent.keyCode;

    if (key == 13) {
        document.getElementById("btnSearch").click();
    }
    else if (key == 27)
    {
        document.getElementById("btnClearSearch").click();
    }
}
  
    function setActiveTab(tab) {
        var g = document.getElementById('tabGeneral');
        var b = document.getElementById('tabDetails');
        if (tab == 'tabGeneral') {
            g.className = 'tabGeneralA';
            document.getElementById('content_General').style.display = 'block';
            b.className = 'tabDetails';
            document.getElementById('content_Details').style.display = 'none';
        }
        else {
            g.className = 'tabGeneral';
            document.getElementById('content_General').style.display = 'none';
            b.className = 'tabDetailsA';
            document.getElementById('content_Details').style.display = 'block';
        } 
    }

    function SaveContact() {

        if (!ValidateForm(ValidateEditContact))
              return;
        
        // Set UI
        var oSource = document.getElementById("SaveContactAnchor");
        if (oSource)
        {
            oSource.href = "#";
            oSource.style.cursor = "wait";
        }        
                
        var oSerializer = new ContactSerializer();
        
        // Properties
        oSerializer.addProperty("txtFirstName", "FirstName");
        oSerializer.addProperty("txtLastName", "LastName");
        oSerializer.addProperty("txtMiddleName", "MiddleName");
        
        // Fields
        oSerializer.addField("txtTitle", "NamePrefix");
        oSerializer.addField("txtNick", "Nick");
        oSerializer.addField("txtBirthday", "Birthday");
        
        oSerializer.addField("txtMobile", "PhoneNumber", "Cell");
        oSerializer.addField("txtPrimary", "PhoneNumber", "Pref");
        oSerializer.addField("txtHome", "PhoneNumber", "Home");
        oSerializer.addField("txtFax", "PhoneNumber", "Fax", "Home");
        oSerializer.addField("txtOtherPhone", "PhoneNumber");        
        oSerializer.addField("txtPager", "PhoneNumber", "Pager");
        oSerializer.addField("txtPTT", "PTT");
        oSerializer.addField("txtEmail", "Email");
        oSerializer.addField("txtEmailWork", "Email", "Work");
        oSerializer.addField("txtEmailHome", "Email", "Home");

        oSerializer.addField("txtJobTitle", "Title");
        oSerializer.addField("txtCompany", "Company");
        oSerializer.addField("txtCompanyPhone", "PhoneNumber", "Work", "Pref");

        oSerializer.addField("txtWork", "PhoneNumber", "Work");
        oSerializer.addField("txtCellWork", "PhoneNumber", "Work", "Cell");
        oSerializer.addField("txtFaxWork", "PhoneNumber", "Fax", "Work");
        
        // Addresses
        oSerializer.addAddress("");
        oSerializer.addAddress("Work");
        
        oSerializer.close();
        
        var xml = oSerializer.toString();

        var id = parseInt( GetStateValue("Contact_ID"));
        var url = null;
        if ( id > 0)
        {
            var pageNumber = GetOpenerPageNumber(1);
            url = CreateUrl(CreateActionUrl("Contacts", "Replace"), "contactID", id, "pageNumber", pageNumber);
        }
        else
            url = CreateActionUrl("Contacts", "Add");
        Request.executeCallback("RefreshOpenerWindow", url, xml);

    }

    function SaveEvent() {
        if (!ValidateForm(ValidateCalendarEvent))
            return;

        // Set UI
        var oSource = document.getElementById("SaveEventAnchor");
        if (oSource) {
            oSource.href = "#";
            oSource.style.cursor = "wait";
        }
        var oSerializer = new EventSerializer();

        // Properties
        oSerializer.addProperty("EventId", "id");
        oSerializer.addProperty("TimeZoneOffset", "timeZoneOffset");
        oSerializer.addProperty("txtSummary", "summary");
        oSerializer.addProperty("txtLocation", "location");
        oSerializer.addProperty("EventCategory", "category");

        // Timestamp
        oSerializer.addTimestamp("txtStartDate", "txtStartTime", "localStartDate");
        oSerializer.addTimestamp("txtEndDate", "txtEndTime", "localEndDate");
        
        // Multiline
        oSerializer.addMultiline("txtDescription", "description");

        oSerializer.addReminder("reminder");

        var data = oSerializer.toString();
        var url = CreateActionUrl("Calendar", "SaveEvent");

        Request.executeCallback("RefreshOpenerWindow", url, data);
    }

    function DeleteEvent() {
        if (!confirm(CONFIRM_DELETE_EVENT))
            return;

        // Set UI
        var oSource = document.getElementById("DeleteEventAnchor");
        if (oSource) {
            oSource.href = "#";
            oSource.style.cursor = "wait";
        }

        var id = GetInputValueById("EventId");
        var url = CreateUrl(CreateActionUrl("Calendar", "Delete"), "eventId", id);

        Request.executeCallback("RefreshOpenerWindow", url);

    }
      
      function GetOpenerPageNumber(defaultValue)
      {
        if (window.opener && !window.opener.closed)
        {
            if (typeof(window.opener.GetCurrentPage) == "undefined")
            {
                alert(FAILED_TO_ACCESS_OPENER);
                return defaultValue;
            }   
            var page = window.opener.GetCurrentPage("Contacts");
            if (typeof(page) == "undefined")
                return defaultValue;
        }
        return defaultValue;
    }
      
      function RefreshOpenerWindow(responseText) {
        if (window.opener && !window.opener.closed) {
            var callback = (responseText == "reload") ? "ReloadPage" : "RefreshUpdatePanelFromChild";

            if (eval("typeof(window.opener." + callback + ")") == "undefined")
            {
                alert(FAILED_TO_ACCESS_OPENER);
                return;
            }
            eval("opener."+callback+"(responseText, window.self)");
        }
        else
            window.close();

    }

    function ReloadPage(sReponse, oChildWindow) {
        location.reload(true);
        oChildWindow.close();
        focus();
    }

    function RefreshUpdatePanelFromChild(sHtml, oChildWindow) {
        var oContainer = document.getElementById(DefaultUpdatePanelID);
        if (oContainer == null) {
            alert(FAILED_TO_ACCESS_OPENER);
        }
        else {
            if (IsHomePage())
                location.reload(true);
            else if ( ! AjaxRedirectToLogin(sHtml))
                oContainer.innerHTML = sHtml;

            oChildWindow.close();
        }
        window.focus();
    }
      
     function IsHomePage()
     {
        var oTest = document.getElementById("HomeGalleryPlaceHolder");
        if (oTest)
            return true;
        else
            return false;
     }

     function SwitchContactsFolder(oSelect) {
         var showDeleted = (oSelect.value == "0");
         if (showDeleted)
             location.href = "?deleted=true";
         else
             location.href = location.href.substr(0, location.href.length - location.search.length);
     }


     function SwitchSMSFolder(folders) {
         var selectedFolder = folders.value;
         if (selectedFolder.charAt(0) == "_") {
             location.href = "Show" + selectedFolder + "?deleted=true";
             return;
         }
         location.href = "Show_" + selectedFolder;
     }

     function SwitchGalleryFolder(oSelect) {
         var showDeleted = (oSelect.value == "0");
         var currentPage = location.href.substr(0, location.href.length - location.search.length).split("#")[0];
         if (showDeleted)
             currentPage = currentPage + "?deleted=true";
         location.href = currentPage;
     }
   
   

   function DoSyncNow(url) 
   {
       Request.executeCallback("ShowSendSmsResult", url, "");
   }
   
   function ShowSendSmsResult(result) {
       if (result == "ok")
           alert(SYNC_NOW_OK);
       else
           alert(SYNC_NOW_FAIL);
   }

   function DownloadSms(url) {
       Request.executeCallback("ShowDownloadSmsResult", url, "");
   }

   function SendConfigSms(url) {
       Request.executeCallback("SendConfigSmsResult", url, "");
   }

   function ShowDownloadSmsResult(result) {
           if (result == "ok")
               alert(DOWNLOAD_SMS_OK);
           else
               alert(DOWNLOAD_SMS_FAILED);
   }

   function SendConfigSmsResult(result) {
           if (result == "ok")
               alert(SEND_CONFIG_SMS_OK);
           else
               alert(SEND_CONFIG_SMS_OK_FAILED);
   }
   
   var ContactSerializer = function ()
   {
        this.sb = new StringBuilder();
        this.sb.append("<ContactItem><MemoryType>Phone</MemoryType>");
   }
   
   function ContactSerializer$addProperty(elementID, fieldName)
   {
        var fieldValue = GetInputValueById(elementID);

        if (fieldValue == "")
            return;
        this.sb.append("<").append(fieldName).append(">");
        this.sb.append(fieldValue);
        this.sb.append("</").append(fieldName).append(">");
   }

   function ContactSerializer$addField(elementID) {
       var oInput = document.getElementById(elementID);
       if (oInput == null)
           return;

       var fieldValue = oInput.value.trim();
       var fieldId = oInput.getAttribute("fieldId");
       var fieldName = arguments[1];

       if ((fieldValue == "") && (fieldId == null))
           return;
       this.sb.append("<ItemFields>")
       if (fieldId != null)
           this.sb.append("<Id>").append(fieldId).append("</Id>");
       
       this.sb.append("<FieldName>").append(fieldName).append("</FieldName>");
       this.sb.append("<FieldValue>").append(fieldValue).append("</FieldValue>");

       for (var i = 2; i < arguments.length; i++)
           this.sb.append("<ContactFieldType>").append(arguments[i]).append("</ContactFieldType>");

       this.sb.append("</ItemFields>");
   }
   
   function ContactSerializer$addAddress(addressType) {
        var addressFields = new Array("Street", "Locality", "Region", "Country", "PostalCode");
        var addressValues = new Array(addressFields.length);
        
        // Check if should continue
        var isEmpty = true;
        var sAddressId = null;
        for(var i =0; i < addressFields.length; i++)
        {
            var id = "txt" + addressFields[i] + addressType;
            var oInput = document.getElementById(id);
            if (oInput == null)
                return;
            var addressId = oInput.getAttribute("fieldId");
            if (addressId != "")
                sAddressId = addressId;
            var val = GetInputValueById(id);
            if (val != "")
            {
                isEmpty = false;
                addressValues[i] = val;
            }
        }
        
        if (isEmpty && sAddressId == null)
            return;
            
        this.sb.append("<Addresses>");
        if ( addressType != "")
            this.sb.append("<AddressType>").append(addressType).append("</AddressType>");

        if (sAddressId != null)
            this.sb.append("<Id>").append(sAddressId).append("</Id>");            

        if (!isEmpty) {
            for (var i = 0; i < addressFields.length; i++) {
                if (addressValues[i] == null)
                    continue;
                this.sb.append("<AddressFields>");
                this.sb.append("<FieldName>").append(addressFields[i]).append("</FieldName>");
                this.sb.append("<FieldValue>").append(addressValues[i].trim()).append("</FieldValue>");
                this.sb.append("</AddressFields>");
            }
        }    
           
        this.sb.append("</Addresses>");
   }
   
   function ContactSerializer$close()
   {
        this.sb.append("</ContactItem>");
   }
   
   function ContactSerializer$toString()
   {
        return this.sb.toString();
   }
   
   ContactSerializer.prototype = 
   {
        addProperty : ContactSerializer$addProperty,
        addField : ContactSerializer$addField,
        addAddress : ContactSerializer$addAddress,
        close : ContactSerializer$close,
        toString : ContactSerializer$toString
   }

   var EventSerializer = function() {
       this.sb = new StringBuilder();
   }

   function EventSerializer$addProperty(sInputId, sFieldName) {
       var v = GetInputValueById(sInputId);
       if (v == "")
           return;
       this.sb.append(sFieldName).append("=").append(escape(v)).append("&");
   }

   function EventSerializer$addTimestamp(sDateId, sTimeId, sFieldName) {
       var date = GetInputValueById(sDateId);
       var time = GetInputValueById(sTimeId);
       var v = date + "|" + time;
       this.sb.append(sFieldName).append("=").append(v).append("&");
   }

   function EventSerializer$addMultiline(sInputId, sFieldName) {
       var v = GetInputValueById(sInputId);
       if (v == "")
           return;
       var maxStringLen = 2000;
       if (v.length > maxStringLen)
            v = v.substr(0, maxStringLen);
       this.sb.append(sFieldName).append("=").append(escape(v)).append("&");
   }

   function EventSerializer$addReminder(sFieldName) {
       var selected = GetInputValueById("lstAudioReminder");
       if (selected != "AudioReminder")
           return;

       var v = GetInputValueById("txtAudioReminder").parseInt();
       var factor = GetInputValueById("lstAudioReminderFactor").parseInt();

       v *= factor;

       this.sb.append(sFieldName).append("=").append(v).append("&");
       
   }

   function EventSerializer$toString() {
       return this.sb.toString();
   }

   EventSerializer.prototype = {
       addProperty: EventSerializer$addProperty,
       addTimestamp: EventSerializer$addTimestamp,
       addMultiline: EventSerializer$addMultiline,
       addReminder: EventSerializer$addReminder,
       toString: EventSerializer$toString
   }
   
   function GetInputValueById(elementID)
   {
        var oInput = document.getElementById(elementID);
        if (oInput == null)
        {            
            return "";
        }
        return oInput.value.trim();
   }

   function ContactSerializer$addAddressField(fieldName, fieldValue) {
   }

   function DoAdminRequest(url) {
       location.href = url;
   }

   function DoAdminAddContacts() {
       
       var firstName = document.getElementById("txtFirstName");
       var lastName = document.getElementById("txtLastName");
       var email = document.getElementById("txtEmail");
       var userName = document.getElementById("txtUserName");
       var password = document.getElementById("txtPassword");
       var phoneNumber = document.getElementById("txtPhoneNumber");
       var imei = document.getElementById("txtImei");
       
       if(phoneNumber.value == ""){
          alert("Phonenumber cannot be empty");}
       if(imei.value == ""){
          alert("Imei cannot be empty");}

       var url = "AddCustomer?firstName=" + firstName.value + "&lastName=" + lastName.value + "&email=" + email.value + "&userName=" + userName.value + "&password=" + password.value + "&phoneNumber=" + phoneNumber.value + "&imei=" + imei.value;

       location.href = url;
   }

   function AdminClearCustomerFields() {
       
       var firstName = document.getElementById("txtFirstName");
       var lastName = document.getElementById("txtLastName");
       var email = document.getElementById("txtEmail");
       var userName = document.getElementById("txtUserName");
       var password = document.getElementById("txtPassword");
       var phoneNumber = document.getElementById("txtPhoneNumber");
       var imei = document.getElementById("txtImei");

       firstName.value = "";
       lastName.value = "";
       email.value = "";
       userName.value = "";
       password.value = "";
       phoneNumber.value = "";
       imei.value = "";
       
       location.href = "../Admin/"
   }

   function UploadToSocialNetwork(networkType) {
       var Ids = GetSelectedItems("fileId");
       if (Ids == "") {
           alert("Select one picture. You did not select any");
           return;
       }
       if (Ids.indexOf(",") > 0) {
           alert("Select one picture. You selected more");
           return;
       }
       var fileId = Ids;
       $("#UploadingState").show();

       var url = CreateActionUrl("Gallery", "UploadFile").replace("Gallery", "SocialNetwork")
            + "/" + networkType + "?fileId=" + fileId;
       
       Request.executeCallback("ShowUploadToSnResult", url, "");
   }

   function ShowUploadToSnResult(result) {
        $("#UploadingState").hide();
       
       if (result == "Ok")
           return;
       
       var parts = result.split(";");
       if (parts[0] == "AuthenticationRequired") {
           window.open(parts[1], "Picasa");
       }
       else
           alert(parts[1]);
   }

   function ChangePasswordClean() {
       $('#dialog').toggle();
       $('#txtOldPassword').val('');
       $('#txtNewPassword').val('');
       $('#txtConfirmPassword').val('');
       $('#lblError').hide();
   }

   function ChangePasswordDisplayError(errorMessage) {
       $('#lblError').show();
       $('#lblError').text(errorMessage);
   } 
   function ChangePassword() {
       oldPassword = $('#txtOldPassword').val();
       newPassword = $('#txtNewPassword').val();
       confirmedPassword = $('#txtConfirmPassword').val();
       if (oldPassword.length == '') {
           ChangePasswordDisplayError('Please type the old password');
           return;
       }
       if (newPassword.length < 5) {
           ChangePasswordDisplayError('Password should be at least 5 characters');
           return;
       }
       if (newPassword != confirmedPassword) {
           ChangePasswordDisplayError('Please confirm your new password');
           return;
       }
       $('#lblError').hide();
       var url = "../Utilities/ChangePassword/"
            + "?oldPassword=" + oldPassword
            + "&newPassword=" + newPassword
            + "&confirmPassword=" + confirmedPassword;

       Request.executeCallback("ChangePasswordResult", url, "");
   }

   function ChangePasswordResult(result) {
       if (result == "")
           ChangePasswordClean();
       else
           ChangePasswordDisplayError(result);
   }

   function InitUploadify() {

       var tab = $("#hdController").val();
       if (tab == null) {
           return;
       }
       var ext = '*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.avi;*.mov;*.mp4;*.3gp;*.3g2;*.mp3;*.wav;*.amr;*.aac';
       var desc = 'Audio/Image/Video';

       if (tab.toLowerCase() == 'photo') { 
        ext = '*.jpg;*.jpeg;*.gif;*.png;*.bmp';
        desc = 'Photos';
       }
       else if (tab.toLowerCase() == 'video')
       {
         ext = '*.avi;*.mov;*.mp4;*.3gp;*.3g2';
         desc = 'Videos';
       }
       else if (tab.toLowerCase() == 'audio')
       {
         ext = '*.mp3;*.wav;*.amr;*.aac';
         desc = 'Audio';
       }
       var errors = '';

       $('#fileInput').uploadify({
           'uploader': $("#baseUrl").val() + 'Content/uploadify.swf',
           'script': $("#uploadFileUrl").val(),
           'scriptData': { 'id': $("#customerId").val() },
           'cancelImg': $("#baseUrl").val() + 'Content/Images/cancel.png',
           'buttonImg': $("#baseUrl").val() + 'Content/Images/UPLOAD-FILE-button.png',
           'auto': true,
           'multi': false,
           'fileDesc': desc,
           'fileExt': ext,
           'buttonText': 'Upload Images',
           'folder': '/uploads',
           'height': 30,
           'width': 150,
           'scriptAccess': 'always',
           'onAllComplete': function(event, queueid, fileobj, response, data) {
               if (errors == '') {
                   alert(UPLOAD_OK);
               }
               else {
                   alert(UPLOAD_ERROR + "\n" + errors + "\n" + UPLOAD_CORRUPTED);
                   $("#fileInput").uploadifyClearQueue();
                   errors = '';
               }
           },
           'onError': function(event, queueid, fileobj, errorObj) {
               var fileName = fileobj.name;
               errors += "- " + fileName + '\n';
           }
       });
   }
   
   if (window.jQuery && $.linkselect) {
       $(document).ready(function() {
           $("#cmbLanguages").linkselect({
               change: function(li, value, text) {
                   var url = document.getElementById("UtilitiesSetLanguageUrl");
                   location.href = url.value + "?lang=" + value + "&returnUrl=" + escape(location.href);
               }
           });
       });
   }



   function TermsOfUse() {
       var handle = window.open(url, "celleSyncShowDetails", "width=670,height=495,status=no,toolbar=no,menubar=no");        
   }
