
var oldtitle;
var oldamount;
var olddesc;
var olddate;
var keyTimeout;
var hasWidget = false;
var hasDescription = false;
var eventID = "";
var paymentType = "";
var eventEmail = "";
var demoParamArray;

function initPage()
{
    if ($("#defaulteventid")[0] != undefined)
        eventID = $("#defaulteventid").html();
    if ($("#defaultpaymenttype")[0] != undefined)
        paymentType = $("#defaultpaymenttype").html();
    if ($("#defaultemail")[0] != undefined)
        eventEmail = $("#defaultemail").html();
    if ($("#description")[0] != undefined)
        hasDescription = true;
    if ($("#widgetframe")[0] != undefined) {
        hasWidget = true;
    } else {
        oldtitle = "title";
        olddesc = "desc";
        oldamount = 0;
        olddate = 0;
    }

    var indImg = new Image(6, 6);
    indImg.src = "/images/indicator.gif";

    showOrHidePaypalEmail();
    setEndDate();
    startCalendar();
    if (is_ie) {
        if (hasWidget) {
            wObj = $("#widgetframe")[0];
            wObj.innerHTML = '<iframe name="wframe" width="100%" height="100%" scrolling="no" frameborder="0" src="/widget/widget.swf"/>';
        }
        eObj = $("#eventtitle")[0];
        if (eObj && $(eObj).css("display") != "none" &&
        $(eObj).css("visibility") != "hidden" &&
        $(eObj).attr("type") != "hidden")
            eObj.focus();
    }
    if (hasWidget)
        refreshWidget();
    if (eventID == "")
        $("#titleError").hide();

    // f/l name just for subcampaign page
    val = $(".defaultFirstNameError:eq(0)").html();
    if (val != null)
        $("#firstNameError").html(val).show();
    val = $(".defaultLastNameError:eq(0)").html();
    if (val != null)
        $("#lastNameError").html(val).show();

    val = $(".defaultTitleError:eq(0)").html();
    if (val != null)
        $("#titleError").html(val).show();
    val = $(".defaultNameError:eq(0)").html();
    if (val != null)
        $("#nameError").html(val).show();
    val = $(".defaultAmountError:eq(0)").html();
    if (val != null)
        $("#amountError").html(val).show();
    val = $(".defaultDateError:eq(0)").html();
    if (val != null)
        $("#dateError").html(val).show();
    val = $(".defaultContributionMethodError:eq(0)").html();
    if (val != null)
        $("#paymentError").html(val).show();
    val = $(".defaultPayPalEmailError:eq(0)").html();
    if (val != null)
        $("#paymentError").html(val).show();
}

function refreshWidget()
{
    if (!hasWidget) {
        checkFields();
        return;
    }
    window.clearTimeout(keyTimeout);

    if($("#eventenddate").attr("type") != "hidden"){
        validateTitle();
        if (!validateAmount())
            return;
        if (!validateDate())
            return;
    }

    startTime = new Date().getTime();
    endTime = $("#eventenddate")[0].value;
    endTime = parseDate(endTime);

    if (!hasDescription) {
        if (olddate == $("#eventenddate")[0].value &&
        oldtitle == $("#eventtitle")[0].value &&
        oldamount == $("#targetamount")[0].value)
            return;
    } else {
        if (olddate == $("#eventenddate")[0].value &&
        oldtitle == $("#eventtitle")[0].value &&
        olddesc == $("#description")[0].value &&
        oldamount == $("#targetamount")[0].value)
            return;
    }

    widgetWidth = 220;
    widgetHeight = 220;
    demoParamArray = new Array();

    if (eventID == "") {
        demosrc = widgetProtocol + widgetServer +
            "/widget/widget.swf";
        addDemoParam("use_sample_data", "true");
    } else demosrc = widgetProtocol + widgetServer +
            "/widget/id/" + eventID;

    titleStr = "";
    titleStr = $("#eventtitle")[0].value;
    if (titleStr != "")
        addDemoParam("event_title", escape(titleStr));

    if (hasDescription) {
        descStr = $("#description")[0].value;
        if (descStr != "")
            addDemoParam("event_desc", escape(descStr));
    }

    defaultAmount = "9999";
    if (eventID != "")
        defaultAmount = "0";
    amountStr = $("#targetamount")[0].value;
    if (amountStr != "") {
        amountStr = amountStr.replace(/,/, "");
        amountStr = parseInt(amountStr);
        if (!isNaN(amountStr)) {
            if (amountStr < 0)
                amountStr = defaultAmount;
            addDemoParam("demo_target_amount",
                escape(amountStr));
        }
    } else
        addDemoParam("demo_target_amount", defaultAmount);

    if (eventID == "") {
        addDemoParam("color_scheme", "red");
        addDemoParam("show_copytab", "false");
        addDemoParam("demo_current_time", startTime);
        addDemoParam("demo_start_time", startTime);
        addDemoParam("demo_end_time", endTime);
        addDemoParam("demo_collected_amount", "0");
        addDemoParam("demo_animation", "true");
        addDemoParam("chipin_server", widgetServer);
    } else {
        addDemoParam("show_copytab", "false");
        addDemoParam("demo_end_time", endTime);
        addDemoParam("chipin_server", widgetServer);
    }
    if (is_ie) {
        bgcolor = $("#widgetframe").css("backgroundColor");
        addDemoParam("color_stage", bgcolor.substr(1));
    }

    paramStr = "";
    attStr = "";
    for (paramName in demoParamArray) {
        paramVal = demoParamArray[paramName];
        paramStr += "<param name=\"" + paramName + "\" value=\"" + paramVal + "\"></param>";
        attStr += "&" + paramName + "=" + paramVal;
    }
    demostr = "";
    if (!is_ie)
        demostr += "<object width=\"" + widgetWidth + "\" height=\"" + widgetHeight + "\">" + "<param name=\"movie\" value=\"" + demosrc + "\"></param>" + "<param name=\"allowScriptAccess\" value=\"always\"></param><param name=\"wmode\" value=\"transparent\"></param>" + paramStr;
    demostr += "<embed src=\"" + demosrc + "\" " + "flashVars=\"" + attStr.substr(1) + "\" " + "type=\"application/x-shockwave-flash\" allowScriptAccess=\"always\" wmode=\"transparent\" " + "width=\"" + widgetWidth + "\" height=\"" + widgetHeight + "\"></embed>";
    if (!is_ie)
        demostr += "</object>";

    if (has_flash) {
        if (is_ie)
            $("#widgetframe iframe").attr("src",
                demosrc + "?" + attStr.substr(1));
        else
            $("#widgetframe").html(demostr);
    } else
        $("#widgetframe").html('<div style="background: #ffffb4; padding: 10px; border: 1px solid #fbbf15; font-size: 18px;font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-weight: bold; color: #d22119; text-align: center">The ChipIn widget requires Flash 8 or greater. Install the latest  version of Flash by <a style="color: #536731" href="http://www.macromedia.com/go/getflashplayer" target="_blank">clicking here</a>, then quit and relaunch your browser.</div>');
    $("#widgetframe").css("width", widgetWidth + "px");
    $("#widgetframe").css("height", widgetHeight + "px");

    olddate = $("#eventenddate")[0].value;
    oldtitle = $("#eventtitle")[0].value;
    if (hasDescription)
        olddesc = $("#description")[0].value;
    oldamount = $("#targetamount")[0].value;
}

function addDemoParam(paramName, paramVal)
{
    if (paramVal == "")
        return;
    demoParamArray[paramName] = paramVal;
}

function validateDate()
{
    now = new Date().getTime();
    val = $("#eventenddate")[0].value;
    origval = val;
    if (val == null || $.trim(val) == "") {
        endTime = now + (1000 * 60 * 60 * 24 * 30);
        populateDate();
        return true;
    }
    if (val.length < 3) {
        showDateError("Please enter a valid date.");
        return false;
    }
    val = val.replace(/\-/g, '/');
    if (val.indexOf("/") != -1) {
        val = val.replace(/\/\//, "");
        parts = val.split("/");
        if (parts.length == 2) {
            ; // val = val + '/' + new Date().getFullYear();
        } else if (parts.length == 3) {
            if (parts[2].length == 2) {
                fullYear = String(new Date().getFullYear());
                yearPrefix = fullYear.substr(0, 2);
                val = parts[0] + '/' + parts[1] + '/' +
                    yearPrefix + parts[2];
            }
        } else if (parts.length != 3) {
            showDateError("Please enter a valid date.");
            return false;
        }
    } else {
        parts = val.split(" ");
        if (parts.length < 2 || parts.length > 3) {
            showDateError("Please enter a valid date.");
            return false;
        }
        if (parts.length == 2)
            ; // val = val + ' ' + new Date().getFullYear();
    }

    endTime = parseDate(val);
    if (isNaN(endTime)) {
        showDateError("Please enter a valid date.");
        return false;
    }
    if (eventID == "") {
        if (endTime <= now + (1000 * 60 * 60 * 24)) {
            showDateError("Events must be longer than 1 day.");
            return false;
        }
        if (endTime > now + (1000 * 60 * 60 * 24 * 365.24)) {
            showDateError("Events cannot be longer than 1 year.");
            return false;
        }
    }

    endDate = new Date();
    endDate.setTime(endTime);
    month = endDate.getMonth() + 1;
    day = endDate.getDate();
    year = endDate.getFullYear();
    newval = month + '/' + day + '/' + year;
    if (origval != newval)
        $("#eventenddate")[0].value = newval;
    if (olddate != undefined)
        $("#dateError").hide();
    return true;
}

function populateDate()
{
    endDate = new Date();
    endDate.setDate(endDate.getDate() + 30);
    month = endDate.getMonth() + 1;
    day = endDate.getDate();
    year = endDate.getFullYear();
    $("#eventenddate")[0].value = month + '/' + day + '/' + year;
}

function validateTitle()
{
    titleStr = $("#eventtitle")[0].value;
    if (oldtitle != undefined && (!titleStr ||
    $.trim(titleStr) == "" || titleStr.length < 1)) {
        showTitleError("Enter an event title.");
        return false;
    }
    if (oldtitle != undefined)
        $("#titleError").hide();
    return true;
}

function validateAmount()
{
    amountStr = $("#targetamount")[0].value;
    amountStr = amountStr.replace(/,/, "");
    if (amountStr != "") {
        amountStr = Math.round(parseFloat(amountStr) *
            100) / 100;
        if (isNaN(amountStr) || amountStr < 0) {
            showAmountError("Please enter a valid amount.");
            return false;
        } else if (amountStr > 0 && amountStr < 10) {
            showAmountError("The target amount must be at least $10.");
            return false;
        } else if (amountStr >= 10000) {
            paymentTypeStr = "";
            if ($("#paymenttype")[0] != undefined)
                paymentTypeStr = $("#paymenttype")[0].value;

            if(paymentTypeStr == "chipin")  {
                showAmountError("If you'd like to raise $10,000 or more, please <a href=\"http://contact.chipin.com\">contact support</a>.");
                return false;
            }
            else    {
                return true;
            }
        }
    }
    if (oldamount != undefined)
        $("#amountError").hide();
    return true;
}

function validatePayment()
{
    paymentTypeStr = "";
    if ($("#paymenttype")[0] != undefined)
        paymentTypeStr = $("#paymenttype")[0].value;
    else if (paymentType != "")
        paymentTypeStr = paymentType;
    if (paymentTypeStr == "selectone") {
        showPaymentError("Please select a payout type.");
        return false;
    } else if (paymentTypeStr == "paypal") {
        paypalEmailStr = $("#paypalemailinput")[0].value;
        if (!isEventEmail(paypalEmailStr)) {
            showPaymentError("Please enter a valid PayPal email address.");
            return false;
        }
    }
    return true;
}

function validateEmail()
{
    if ($("#eventemail")[0] == undefined)
        return true;
    if (eventEmail == "") {
        emailStr = $("#eventemail")[0].value;
            if (!isEventEmail(emailStr)) {
                showEmailError("Enter a valid email address.");
                return false;
            }
    }
    $("#emailError").hide();
    return true;
}

function validateFirstName()
{
    if ($("#firstname")[0] == undefined)
        return true;
    if ($("#firstname")[0].value == '') {
        showFirstNameError("Enter a first name.");
        return false;
    }
    $("#firstNameError").hide();
    return true;
}

function validateLastName()
{
    if ($("#lastname")[0] == undefined)
        return true;
    if ($("#lastname")[0].value == '') {
        showLastNameError("Enter a last name.");
        return false;
    }
    $("#lastNameError").hide();
    return true;
}

function showTitleError(msg)
{
    $("#titleError").html(msg).show();
}

function showFirstNameError(msg)
{
    $("#firstNameError").html(msg).show();
}

function showLastNameError(msg)
{
    $("#lastNameError").html(msg).show();
}

function showAmountError(error)
{
    $("#amountError").html(error).show();
}

function showDateError(msg)
{
    $("#dateError").html(msg).show();
}

function showPaymentError(error)
{
    $("#paymentError").html(error).show();
}

function showEmailError(msg)
{
    $("#emailError").html(msg).show();
}

function validateForm()
{
    isOKForm = true;
    // subcampaign only
    result = validateFirstName();
    if (!result)
        isOKForm = false;
    result = validateLastName();
    if (!result)
        isOKForm = false;

    result = validateTitle();
    if (!result)
        isOKForm = false;
    result = validateAmount();
    if (!result)
        isOKForm = false;
    if($("#eventenddate").attr("type") != "hidden"){
        result = validateDate();
        if (!result)
            isOKForm = false;
    }
    result = validateEmail();
    if (!result)
        isOKForm = false;
    result = validatePayment();
    if (!result)
        isOKForm = false;
    if (isOKForm == true)
        $(".starteventbutton").parent().html('<div style="font-size:12px;margin-top:10px;margin-bottom:20px;color:#333333;white-space:nowrap">Please wait... <img src="/images/indicator.gif" alt="" style="padding-left:5px"/></div>');

    return isOKForm;
}

function setPaymentType()
{
    if ($("#paymenttype")[0] == undefined)
        return;
    showOrHidePaypalEmail();
}

function showOrHidePaypalEmail()
{
    $("#paymentInfo").hide();
    paymentTypeStr = "";
    if ($("#paymenttype")[0] != undefined)
        paymentTypeStr = $("#paymenttype")[0].value;
    else if (paymentType != "")
        paymentTypeStr = paymentType;
    if (paymentTypeStr == "")
        return;
    if (paymentTypeStr == "paypal") {
        $("#paymentInfo").html('By providing us with your PayPal account email address, all contributions will go directly to you. PayPal may charge you a <a href="http://www.paypal.com/cgi-bin/webscr?cmd=_display-fees-outside" target="_blank">processing fee</a>. <a href="https://www.paypal.com/us/mrb/pal=Y9XTC2QGQ84AE" target="_blank">Click here</a> to create a PayPal account.');
        $("#paymentInfo").show();
        $("#paymentError").hide();
        if (eventID == "")
            $("#paypalemail div").show();
        else
            $("#paypalemail").show();
        if ($("#paypalemailinput")[0] != undefined) {
            $("#paypalemailinput")[0].focus();
            $("#eventtitle")[0].focus();
        }
    } else {
        if (paymentTypeStr == "chipin") {
            $("#paymentInfo").html('If you want ChipIn to hold your contributions, we can send you funds either via ACH (direct deposit to your checking account) or via PayPal.  There is a $10,000 per-month limit (please <a href="http://contact.chipin.com/">contact us</a> if you want to raise more).  Due to our credit card acceptance fees and administration costs, 3.9% will be deducted when you claim your money.');
            // $("#paymentInfo").html('If you want ChipIn to hold your contributions, we can send you funds either via ACH (direct deposit to your checking account) or mail you a check. Due to our credit card acceptance fees and administration costs, <b>4%</b> will be deducted when you claim your money.');
            $("#paymentInfo").show();
        }
        if (eventID == "")
            $("#paypalemail div").hide();
        else
            $("#paypalemail").hide();
        $("#paymentError").hide();
    }
}

function setEndDate()
{
    if ($("#eventenddate")[0] == undefined)
        return;
    oldVal = $("#eventenddate")[0].value;
    if (oldVal.length > 3)
        return;
    populateDate();
}

function startCalendar()
{
    if ($("#eventenddate")[0] == undefined)
        return;
    thisYear = new Date().getFullYear();
    nextYear = thisYear + 1;
    if (hasWidget) {
        Calendar.setup({
            inputField:"eventenddate",
            ifFormat:"%m/%d/%Y",
            showsTime:false,
            button:"eventenddate",
            singleClick:true,
            align:"Bl",
            weekNumbers:false,
            range:new Array(thisYear, nextYear),
            cache:true,
            step:1,
            onUpdate:refreshWidget
        });
    } else {
        Calendar.setup({
            inputField:"eventenddate",
            ifFormat:"%m/%d/%Y",
            showsTime:false,
            button:"eventenddate",
            singleClick:true,
            align:"Bl",
            weekNumbers:false,
            range:new Array(thisYear, nextYear),
            cache:true,
            step:1,
            onUpdate:validateDate
        });
    }
}

function fieldKeypress()
{
    window.clearTimeout(keyTimeout);
    keyTimeout = window.setTimeout('refreshWidget()', 1000);

    // check validation errors

    obj = $("#firstNameError")[0];
    if (obj != undefined && $("#firstNameError").
    css("display") != "none")
        validateFirstName();
    obj = $("#lastNameError")[0];
    if (obj != undefined && $("#lastNameError").
    css("display") != "none")
        validateLastName();
    obj = $("#emailError")[0];
    if (obj != undefined && $("#emailError").
    css("display") != "none")
        validateEmail();
}

function checkFields()
{
    validateTitle();
    validateAmount();
    validateDate();
}

function isEventEmail(str)
{
    matches = str.match(/(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))$)/g);
    if (matches && matches.length == 1)
        return true;
    return false;
}

function parseDate(str)
{
    str = $.trim(str);
    str = str.replace(/-/g, '/');
    str = str.replace(/,/g, ' ');
    str = str.replace(/  /g, ' ');
    returnTime = 0;
    nowDate = new Date();
    nowMonth = nowDate.getMonth() + 1;
    nowDay = nowDate.getDate();
    nowDate.setHours(0);
    nowDate.setMinutes(0);
    nowDate.setSeconds(0);
    nowDate.setMilliseconds(0);
    yearNum = nowDate.getFullYear();
    if (str.indexOf("/") != -1) {
        parts = str.split("/");
        if (parts.length != 2 && parts.length != 3)
            return NaN;
        monthNum = parts[0];
        dayNum = parts[1];
        if (parts.length == 2) {
            parts[2] = yearNum;
            if (monthNum < nowMonth ||
            (monthNum == nowMonth && dayNum <= nowDay))
                parts[2] = yearNum + 1;
        }
        yearNum = parts[2];
        nowDate.setYear(yearNum);
        nowDate.setMonth(monthNum - 1);
        nowDate.setDate(dayNum);
        returnTime = nowDate.getTime();
    } else {
        parts = str.split(" ");
        if (parts.length != 2 && parts.length != 3)
            return NaN;
        if (parts.length > 2 && parts[2].length == 4) {
            matches = parts[2].match(/\d{4}/);
            if (matches && matches.length == 1) {
                nowDate.setYear(parts[2]);
            } else
                return NaN;
        }
        part1 = parseInt(parts[0]);
        part2 = parseInt(parts[1]);
        if (isNaN(part1) && isNaN(part2))
            return NaN;
        if (isNaN(part1))
            monthNum = getMonthNum(parts[0]);
        else
            monthNum = part1;
        if (isNaN(part2))
            monthNum = getMonthNum(parts[1]);
        else
            dayNum = part2;
        if (parts.length == 2) {
            if (monthNum < nowMonth ||
            (monthNum == nowMonth && dayNum <= nowDay))
                nowDate.setYear(yearNum + 1);
            else
                nowDate.setYear(yearNum);
        }
        nowDate.setMonth(monthNum - 1);
        nowDate.setDate(dayNum);
        returnTime = nowDate.getTime();
    }
    if (monthNum < 1 || monthNum > 12)
        return NaN;
    if (dayNum < 1 || dayNum > 31)
        return NaN;
    return returnTime;
}

function getMonthNum(str)
{
    str = str.toLowerCase();
    for (i = 0; i < shortMonthArray.length; i++) {
        if (str == shortMonthArray[i].toLowerCase())
            return i + 1;
    }
    for (i = 0; i < monthArray.length; i++) {
        if (str == monthArray[i].toLowerCase())
            return i + 1;
    }
    return new Date().getMonth() - 1;
}

addEvent(window, 'load', initPage);
