﻿var maxZIndex = 50;
var redirectStatFrame;

function mouseX(evt) {
    if (evt.pageX) return evt.pageX;
    else if (evt.clientX)
        return evt.clientX + (document.documentElement.scrollLeft ?
   document.documentElement.scrollLeft :
   document.body.scrollLeft);
    else return null;
}

function mouseY(evt) {
    if (evt.pageY) return evt.pageY;
    else if (evt.clientY)
        return evt.clientY + (document.documentElement.scrollTop ?
   document.documentElement.scrollTop :
   document.body.scrollTop);
    else return null;
}

function clickButton(e, buttonId) {
    var evt = e ? e : window.event;
    var bt = document.getElementById(buttonId);
    if (bt) {
        if (evt.keyCode == 13) {
            bt.click();
            return false;
        }
    }
}


function getLeftPos(obj) {
    var res = 0;
    while (obj) {
        res += obj.offsetLeft;
        obj = obj.offsetParent;
    }
    return res;
}

function getLeftPosCentered(obj) {
    var res = document.documentElement.scrollWidth / 2 - ((obj.scrollWidth == 0) ? parseInt(obj.style.width) : obj.scrollWidth) / 2;
    return res;
}


function getTopPos(obj) {
    var res = 0;
    while (obj) {
        res += obj.offsetTop;
        obj = obj.offsetParent;
    }
    return res;
}

function getTopScroll() {
    // Chrome has a known bug, and refers to document.body.scrollTop instead of document.documentElement.scrollTop (which is always 0)
    // So, we'll consider one of them (a non-zero one).
    return (document.documentElement.scrollTop == 0) ? document.body.scrollTop : document.documentElement.scrollTop;
}

function htmlencode(str) {
    str = '' + str;
    str = str.replace(/\&/gi, '&amp;');
    str = str.replace(/\"/gi, '&quot;');
    str = str.replace(/\</gi, '&lt;');
    str = str.replace(/\>/gi, '&gt;');
    return str;
}

function chbCheckAll(formObj, checkName, checkVal) {
    var el = formObj.elements;
    for (count = 0; count < el.length; count++) {
        if (el[count].name == checkName + '[]') {
            if (!el[count].disabled) el[count].checked = checkVal;
        }
    }
}

function chbExamAll(formObj, checkName, resName) {
    var checkCount = 0;
    var boxCount = 0;
    var el = formObj.elements;
    for (count = 0; count < el.length; count++) {
        if (el[count].name == checkName + '[]') {
            boxCount++;
            if (el[count].checked || el[count].disabled) checkCount++;
        }
    }
    formObj.elements[resName].checked = (checkCount == boxCount);
}

function toStandardFloat(s) {
	return parseFloat(s.replace(/,/g, "."));
}

function getTargetURL(e) {
	var targetURL = "";
	var srcLink = window.event ? window.event.srcElement : e.target;
	if (srcLink.tagName.toLowerCase() == "a")
		targetURL = srcLink.href;
	else while (1) {
		srcLink = srcLink.parentNode;
		if (srcLink == null)
			break;
		if (srcLink.tagName && srcLink.tagName.toLowerCase() == "a") {
			targetURL = srcLink.href;
			break;
		}
	}

	return targetURL;
}


var baseurl;

function rate(messageId, isPositive, baseURL, ratingMinusID, ratingPlusID, ratingMinusResultID, ratingPlusResultID, ratingThanksID, ratingPromptID) {
    var cXML = sendAJAXRequest(baseURL + 'ajax/rating.ashx?action=' + (isPositive ? 'plus' : 'minus') + '&id_message=' + messageId, '');
    if (cXML) {
        var r = cXML.getElementsByTagName('response');
        if (r.length) {
            document.getElementById(ratingPlusResultID).innerHTML = r[0].childNodes[0].nodeValue + "%";
            document.getElementById(ratingMinusResultID).innerHTML = 100 - parseInt(r[0].childNodes[0].nodeValue) + "%";

            document.getElementById(ratingMinusID).onclick = null;
            document.getElementById(ratingPlusID).onclick = null;

            document.getElementById(ratingPromptID).style.display = "none";
            document.getElementById(ratingThanksID).style.display = "";
        }
    }
}

function setMessageStatus(messageId, action, baseURL, actionConfirmationText, suggestRemoveFromBlackListText) {
    if (actionConfirmationText == "" || confirm(actionConfirmationText)) {
        var cXML = sendAJAXRequest(baseURL + 'ajax/setMessageStatus.ashx?action=' + action + '&id_message=' + messageId, '');
        if (cXML) {
            var r = cXML.getElementsByTagName('Status');
            if (r.length) {
                var suggestRemoveFromBlackListOwner = (r[0].getAttributeNode("SuggestRemoveFromBlackListOwner") && r[0].getAttribute("SuggestRemoveFromBlackListOwner") == "true") ? true : false;
                var suggestRemoveFromBlackListForCustomer = (r[0].getAttributeNode("SuggestRemoveFromBlackListForCustomer") && r[0].getAttribute("SuggestRemoveFromBlackListForCustomer") == "true") ? true : false;
                if ((suggestRemoveFromBlackListOwner || suggestRemoveFromBlackListForCustomer) && confirm(suggestRemoveFromBlackListText)) {
                    var channelId = parseInt(r[0].getAttributeNode("ChannelId") ? r[0].getAttribute("ChannelId") : "-1");

                    if (channelId > 0) {
                        var arrIDs = new Array();
                        var i = -1;
                        if (suggestRemoveFromBlackListOwner) {
                            var ownerCustomerId = parseInt(r[0].getAttributeNode("OwnerCustomerId") ? r[0].getAttribute("OwnerCustomerId") : "-1");
                            if (ownerCustomerId > 0) {
                                arrIDs[++i] = ownerCustomerId;
                            }
                        }

                        if (suggestRemoveFromBlackListForCustomer) {
                            var forCustomerContentProviderCustomerId = parseInt(r[0].getAttributeNode("ForCustomerContentProviderCustomerId") ? r[0].getAttribute("ForCustomerContentProviderCustomerId") : "-1");
                            if (forCustomerContentProviderCustomerId > 0) {
                                arrIDs[++i] = forCustomerContentProviderCustomerId;
                            }
                        }

                        sendAJAXRequest(baseURL + 'ajax/removeFromBlackList.ashx?ids_customer=' + arrIDs.join(",") + '&id_channel=' + channelId.toString(), '');
                    }
                }
                location.reload();
            }
        }
    }
}

function getNewLeadId(baseURL, messageId, phone, email) {
	var leadId = "-1";
	var cXML = sendAJAXRequest(baseURL + 'ajax/setLead.ashx?ctype=xml&ltype=pending&phone=' + phone + '&email=' + email + '&id_message=' + messageId, '');
    if (cXML) {
    	var r = cXML.getElementsByTagName('Lead');
    	if (r.length) {
    		leadId = parseInt(r[0].getAttributeNode("LeadId") ? r[0].getAttribute("LeadId") : "-1");
    	}
    }
    return leadId;
}

function getRedirectStatFrame() {
	if (redirectStatFrame == null) {
		redirectStatFrame = document.createElement('iframe');
		redirectStatFrame.style.position = 'absolute';
		redirectStatFrame.style.width = '1px';
		redirectStatFrame.style.height = '1px';
		redirectStatFrame.style.left = '0px';
		redirectStatFrame.style.top = '-5px';
		var pEl = document.getElementsByTagName('body')[0];
		pEl.appendChild(redirectStatFrame);
	}
	return redirectStatFrame;
}

function trackRedirect(e, baseURL, messageId, urlId, isOwnerCredit) {
	var targetURL = getTargetURL(e);
	if (targetURL != "") {
		redirectStatFrame = getRedirectStatFrame();
		redirectStatFrame.src = baseURL + "Redirector.ashx?isOwnerCredit=" + isOwnerCredit + "&messageId=" + messageId + "&urlId=" + urlId + "&targetURL=" + encodeURIComponent(targetURL);
	}
}

function trackRedirectInternal(e, baseURL, messageId, urlId, targetMessageId) {
	var targetURL = getTargetURL(e);
	if (targetURL != "") {
		sendAJAXRequestAsync(baseURL + "RedirectorInternal.ashx?messageId=" + messageId + "&urlId=" + urlId + "&targetURL=" + encodeURIComponent(targetURL) + "&targetMessageId=" + targetMessageId, '', null, null, null);
		if (_gaq) {
			_gaq.push(
				['_trackEvent', 'InternalRedirects', 'MessageId', messageId],
				['_trackEvent', 'InternalRedirects', 'Target URL', decodeURIComponent(targetURL)],
				['_trackEvent', 'InternalRedirects', 'Target MessageId', targetMessageId]
				);
		}
		setTimeout('document.location = "' + targetURL + '"', 500);
	}
}


function addClickFunction(id) {
    var b = document.getElementById(id);
    if (b && typeof (b.click) == 'undefined') b.click = function() {

        {
            var result = true; if (b.onclick) result = b.onclick();
            if (typeof (result) == 'undefined' || result) { { eval("function func_" + id + "() {" + b.parentNode.getAttribute('onclick') + "} func_" + id + "();"); } }
        }
    }
}

function setHidden(id, value) {
   var o = document.getElementById(id);
   o.disabled = value;
   o.parentNode.style.visibility = (value) ? ('hidden') : ('visible'); // parentNode is the wrapper DIV for LinkButton's A
}

function setHiddenDisabled(id, value) {
    var o = document.getElementById(id);
    o.disabled = value;
    //o.style.visibility = (value) ? ('hidden') : ('visible');
    o.parentNode.style.display = (value) ? ('none') : (''); // parentNode is the wrapper DIV for LinkButton's A
    o.parentNode.className = o.parentNode.className.replace(/displayNone/gi, "displayDefault");

    //if (navigator.userAgent.toLowerCase().indexOf("chrome") > 0 && id.indexOf("newAuthorButton") > 0) {
	//	alert(o.parentNode.style.display);
	//}
}

function showHideDiv() {
    var hideDiv = document.getElementById('hideDiv');
	hideDiv.style.visibility = 'visible';
	hideDiv.style.zIndex = maxZIndex++;
//	if (document.documentElement && document.documentElement.scrollHeight) {
//	    hideDiv.style.height = document.documentElement.scrollHeight + 'px';
//	}
}

function toggleVisibility(id) {
    oElem = document.getElementById(id);
    if (oElem) {
        oElem.style.visibility = (oElem.style.visibility == "hidden") ? "visible" : "hidden";
    }
}

function toggleDisplay(id, bDisplay) {
    oElem = document.getElementById(id);
    if (oElem) {
        oElem.style.display = (bDisplay) ? "" : "none";
    }
}

function IsEmpty(s) {
    return (s.replace(/ /g, "") == "");
}

function AddDays(dDateFrom, nDays) {
    var nValueOfDateFrom = dDateFrom.valueOf();
    return new Date(nValueOfDateFrom + 86400000 * nDays);
}

function DateIsValid(strDate) {
    try {
        var bReturn = true;
        var strDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
        // Match the format with the valid pattern
        var dArray = strDate.match(strDatePattern);
        if (dArray == null) {
            bReturn = false;
        }
        else {
            // Load datearray representing the date to separate variables
            var nDay = dArray[1];
            var nMonth = dArray[3];
            var nYear = dArray[4];
            // Check for valid months range
            if (nMonth < 1 || nMonth > 12) {
                bReturn = false;
            }
            else {
                // Check for valid days range
                if (nDay < 1 || nDay > 31) {
                    bReturn = false;
                }
                else {
                    // Check that day value does not exceed the maximum for the months of 30 days
                    if ((nMonth == 4 || nMonth == 6 || nMonth == 9 || nMonth == 11) && nDay == 31) {
                        bReturn = false;
                    }
                    else {
                        // Special check for February
                        if (nMonth == 2) {
                            var bIsLeapYear = (nYear % 4 == 0);
                            var nMaxFebDays = bIsLeapYear ? 29 : 28;
                            if (nDay > nMaxFebDays)
                                bReturn = false;
                        }
                    }
                }
            }
        }

        return bReturn;
    }
    catch (e) {
        //alert(e.description);
    }
}


function GetDateFromString(sDate, sDateFormat) {
    var arrDateFormat = sDateFormat.split("-");
    var arrDate = sDate.split("/");

    var nDay = 0;
    var nMonth = 0;
    var nYear = 0;

    if (arrDateFormat[0] == "dd") // dd-mm-yyyy
    {
        nDay = arrDate[0];
        nMonth = arrDate[1];
        nYear = arrDate[2];
    }
    else {
        if (arrDateFormat[0] == "mm") // mm-dd-yyyy
        {
            nMonth = arrDate[0];
            nDay = arrDate[1];
            nYear = arrDate[2];
        }
        else {
            if (arrDateFormat[0] == "yyyy") // yyyy-mm-dd
            {
                nYear = arrDate[0];
                nMonth = arrDate[1];
                nDay = arrDate[2];
            }
        }
    }

    if (nDay != 0 && nMonth != 0 && nYear != 0) {
        if (DateIsValid(nDay + "/" + nMonth + "/" + nYear)) {
            this.now = new Date(nYear, nMonth - 1, nDay);
            this.year = this.now.getFullYear();
            this.month = this.now.getMonth();
            this.day = this.now.getDate();
        }
    }
}

// Returns:
//		0 - if two dates are equal
//		1 - if the 1st date is higher
//		2 - if the 2nd date is higher
//		-1 - if the 1st date is empty
//		-2 - if the 2nd date is empty
//		-3 - if both dates are empty

function CompareDates(sDate1, sDate2, sDateFormat) {
    var nReturn = 0;

    if (sDate1 == "") {
        nReturn = -1;
    }

    if (sDate2 == "") {
        nReturn += -2;
    }

    if (nReturn == 0) {
        var dDate1 = new GetDateFromString(sDate1, sDateFormat);
        var dDate2 = new GetDateFromString(sDate2, sDateFormat);

        var nMSecDate1 = dDate1.now.getTime()
        var nMSecDate2 = dDate2.now.getTime()

        if (nMSecDate1 > nMSecDate2) {
            nReturn = 1;
        }
        else {
            if (nMSecDate2 > nMSecDate1) {
                nReturn = 2;
            }
        }
    } // if(nReturn == 0)

    return nReturn;
}

function NavigateToPage(url) {
    window.location.href = url;
    return false;
}

function GetValidLookupValue(elementId) {
	var returnValue = "-1";
	if (elementId != "") {
		oElement = document.getElementById(elementId);

		if (oElement && oElement.value != "" && oElement.value != "0") {
			returnValue = oElement.value;
		}
	}
	return returnValue;
}

// Cross-browser stuff, available only in IE
if (window.HTMLElement) {
    if(HTMLElement.prototype.__defineGetter__)
    {
        HTMLElement.prototype.__defineGetter__("outerHTML", function() {
            var wrapper = document.createElement("div");
            wrapper.appendChild(this.cloneNode(true));
            return wrapper.innerHTML;
        });
    }

    if(HTMLElement.prototype.__defineSetter__)
    {
        HTMLElement.prototype.__defineSetter__("outerHTML", function(sHTML) {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            var df = r.createContextualFragment(sHTML);
            this.parentNode.replaceChild(df, this);
            return sHTML;
        });
    }

    HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode) {
        switch (where) {
            case "beforeBegin":
                this.parentNode.insertBefore(parsedNode, this);
                break;
            case "afterBegin":
                this.insertBefore(parsedNode, this.firstChild);
                break;
            case "beforeEnd":
                this.appendChild(parsedNode);
                break;
            case "afterEnd":
                if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode, this.nextSibling);
                else
                    this.parentNode.appendChild(parsedNode);
                break;
        }
    };

    HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr) {

        var wrapper = document.createElement("div");
        wrapper.innerHTML = htmlStr;
        this.insertAdjacentElement(where, wrapper.firstChild);
    };
}

// Inserts the copy of the sourceId element's content BEFORE the targetPlaceholderId element.
function CopyElement(oSourceElem, oTargetPlaceholderElem, bMove) {
    var oElemParent = oTargetPlaceholderElem.parentNode;
    oElemParent.insertBefore(bMove ? oSourceElem : oSourceElem.cloneNode(true), oTargetPlaceholderElem);
}

function DeleteElement(oElem) {
    var oElemParent = oElem.parentNode;
    oElemParent.removeChild(oElem);
}
